M117 stage 5

This commit is contained in:
Alexander Frick 2023-10-08 09:16:47 -05:00
parent f3b9119b2a
commit 47c069edfe
15 changed files with 1679 additions and 1086 deletions

View File

@ -146,11 +146,6 @@
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/117.0.5938.157:chrome/browser/chrome_content_browser_client.cc;bpv=1" ADD_DATE="1661054752" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADIUlEQVQ4jW1TXWwUZRQ955ufnZ3dlm4VpE2Q+lND1cSQYDBaKY2VEkUFa1d9K4laBROEIg+mDfvkg5Bu9MWoD/hkTJdqJBFCMRENEqONRkMbIiWGWn5SjWw7OzO7szPf9UFCCnrebu7JuTc55xA3QURYKkEtXw7+1gDm0mDWBtMm+GcAnb+P0VI+lw4fTIp7C6O7dU3nlKFyisxp0TmDRpMmmyDSCqLY96D1HUQIUsxrd9nfD3VrHDbDTi/ENi5V/TCdtmlQ0Y60dmwANNXT0HpodEx+2kNUb/4e45PSUhBR/1lcw6Gvf3fGf4gmJn6NBgGgUBBFAHj+vepdKSvp2r5m/pPu7juqA4fEOTcXvhaG2KAMVjOp5MjJ4eynBOTIz7Vnzs5Jcfoiej9+1TlHAHjyneArKrl/XcVtnQLcS/A/b23J9DzUBgQRcPo84JX90VOF7JCIGFsOBLMCTB/dl3lc9b+7uA1O+jHb4OuFAvVl+oOtLZmekc1JbUc36nt7pb6zK0mslL2n6+3wUZJJyuIuOm7Ps8Xyc8qP3Q+TMDj+2W73MABUatK5vg26vcVQf3navOqL+Ui7kay53dJeEG8AgPE33PEkDI6HSfZ9BRFAQJF/LSVYDSIQEBiKsE0lsRaGNSiTEl43X4SAQKWN8GUj427qG/XyAJB15IvTM+CJKW04FuoiEpd+1Grmj8BvzPIYAGwten2mm9mUsauDBIAnDvgnAHQMrHZX5/NMOguLBy07NXTPKhvVGnDhb0BH3pvfDjcelDExnpoNLormmS/3uT0KAFY0xDs2dhiLqXZsBoBThca9QK1z8mxlZPpCZZeq+2dMqi2AcGYtzOZG9dayrHoFACgiJCkTU9FAJZCtCxX7he3dvCFl60b8ta6lh2/T2Rdf2oam3gc4f2MXRLi7NOd0tq34iFS/aNFHIwBhJLGVSLRqZd3rWNYQfj+L5igOdb6YvoISNEC5LgBSDk9G6ynYScgVrbGgFMsQKSdiLIhIWSe6rGifzz/M8H/bCABjU2L781BeOCMrK5FcvfNeuexB8M1J7N+/MSEpS/n/AGH0clblBN69AAAAAElFTkSuQmCC">chrome_content_browser_client.cc - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/117.0.5938.157:components/flags_ui/flags_state.cc;bpv=1" ADD_DATE="1661054752" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADIUlEQVQ4jW1TXWwUZRQ955ufnZ3dlm4VpE2Q+lND1cSQYDBaKY2VEkUFa1d9K4laBROEIg+mDfvkg5Bu9MWoD/hkTJdqJBFCMRENEqONRkMbIiWGWn5SjWw7OzO7szPf9UFCCnrebu7JuTc55xA3QURYKkEtXw7+1gDm0mDWBtMm+GcAnb+P0VI+lw4fTIp7C6O7dU3nlKFyisxp0TmDRpMmmyDSCqLY96D1HUQIUsxrd9nfD3VrHDbDTi/ENi5V/TCdtmlQ0Y60dmwANNXT0HpodEx+2kNUb/4e45PSUhBR/1lcw6Gvf3fGf4gmJn6NBgGgUBBFAHj+vepdKSvp2r5m/pPu7juqA4fEOTcXvhaG2KAMVjOp5MjJ4eynBOTIz7Vnzs5Jcfoiej9+1TlHAHjyneArKrl/XcVtnQLcS/A/b23J9DzUBgQRcPo84JX90VOF7JCIGFsOBLMCTB/dl3lc9b+7uA1O+jHb4OuFAvVl+oOtLZmekc1JbUc36nt7pb6zK0mslL2n6+3wUZJJyuIuOm7Ps8Xyc8qP3Q+TMDj+2W73MABUatK5vg26vcVQf3navOqL+Ui7kay53dJeEG8AgPE33PEkDI6HSfZ9BRFAQJF/LSVYDSIQEBiKsE0lsRaGNSiTEl43X4SAQKWN8GUj427qG/XyAJB15IvTM+CJKW04FuoiEpd+1Grmj8BvzPIYAGwten2mm9mUsauDBIAnDvgnAHQMrHZX5/NMOguLBy07NXTPKhvVGnDhb0BH3pvfDjcelDExnpoNLormmS/3uT0KAFY0xDs2dhiLqXZsBoBThca9QK1z8mxlZPpCZZeq+2dMqi2AcGYtzOZG9dayrHoFACgiJCkTU9FAJZCtCxX7he3dvCFl60b8ta6lh2/T2Rdf2oam3gc4f2MXRLi7NOd0tq34iFS/aNFHIwBhJLGVSLRqZd3rWNYQfj+L5igOdb6YvoISNEC5LgBSDk9G6ynYScgVrbGgFMsQKSdiLIhIWSe6rGifzz/M8H/bCABjU2L781BeOCMrK5FcvfNeuexB8M1J7N+/MSEpS/n/AGH0clblBN69AAAAAElFTkSuQmCC">flags_state.cc - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/117.0.5938.157:components/omnibox/browser/omnibox_view.cc;bpv=1" ADD_DATE="1661054752" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADIUlEQVQ4jW1TXWwUZRQ955ufnZ3dlm4VpE2Q+lND1cSQYDBaKY2VEkUFa1d9K4laBROEIg+mDfvkg5Bu9MWoD/hkTJdqJBFCMRENEqONRkMbIiWGWn5SjWw7OzO7szPf9UFCCnrebu7JuTc55xA3QURYKkEtXw7+1gDm0mDWBtMm+GcAnb+P0VI+lw4fTIp7C6O7dU3nlKFyisxp0TmDRpMmmyDSCqLY96D1HUQIUsxrd9nfD3VrHDbDTi/ENi5V/TCdtmlQ0Y60dmwANNXT0HpodEx+2kNUb/4e45PSUhBR/1lcw6Gvf3fGf4gmJn6NBgGgUBBFAHj+vepdKSvp2r5m/pPu7juqA4fEOTcXvhaG2KAMVjOp5MjJ4eynBOTIz7Vnzs5Jcfoiej9+1TlHAHjyneArKrl/XcVtnQLcS/A/b23J9DzUBgQRcPo84JX90VOF7JCIGFsOBLMCTB/dl3lc9b+7uA1O+jHb4OuFAvVl+oOtLZmekc1JbUc36nt7pb6zK0mslL2n6+3wUZJJyuIuOm7Ps8Xyc8qP3Q+TMDj+2W73MABUatK5vg26vcVQf3navOqL+Ui7kay53dJeEG8AgPE33PEkDI6HSfZ9BRFAQJF/LSVYDSIQEBiKsE0lsRaGNSiTEl43X4SAQKWN8GUj427qG/XyAJB15IvTM+CJKW04FuoiEpd+1Grmj8BvzPIYAGwten2mm9mUsauDBIAnDvgnAHQMrHZX5/NMOguLBy07NXTPKhvVGnDhb0BH3pvfDjcelDExnpoNLormmS/3uT0KAFY0xDs2dhiLqXZsBoBThca9QK1z8mxlZPpCZZeq+2dMqi2AcGYtzOZG9dayrHoFACgiJCkTU9FAJZCtCxX7he3dvCFl60b8ta6lh2/T2Rdf2oam3gc4f2MXRLi7NOd0tq34iFS/aNFHIwBhJLGVSLRqZd3rWNYQfj+L5igOdb6YvoISNEC5LgBSDk9G6ynYScgVrbGgFMsQKSdiLIhIWSe6rGifzz/M8H/bCABjU2L781BeOCMrK5FcvfNeuexB8M1J7N+/MSEpS/n/AGH0clblBN69AAAAAElFTkSuQmCC">omnibox_view.cc - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/117.0.5938.157:media/gpu/vaapi/vaapi_picture_factory.cc;l=1;bpv=1" ADD_DATE="1661054752" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADIUlEQVQ4jW1TXWwUZRQ955ufnZ3dlm4VpE2Q+lND1cSQYDBaKY2VEkUFa1d9K4laBROEIg+mDfvkg5Bu9MWoD/hkTJdqJBFCMRENEqONRkMbIiWGWn5SjWw7OzO7szPf9UFCCnrebu7JuTc55xA3QURYKkEtXw7+1gDm0mDWBtMm+GcAnb+P0VI+lw4fTIp7C6O7dU3nlKFyisxp0TmDRpMmmyDSCqLY96D1HUQIUsxrd9nfD3VrHDbDTi/ENi5V/TCdtmlQ0Y60dmwANNXT0HpodEx+2kNUb/4e45PSUhBR/1lcw6Gvf3fGf4gmJn6NBgGgUBBFAHj+vepdKSvp2r5m/pPu7juqA4fEOTcXvhaG2KAMVjOp5MjJ4eynBOTIz7Vnzs5Jcfoiej9+1TlHAHjyneArKrl/XcVtnQLcS/A/b23J9DzUBgQRcPo84JX90VOF7JCIGFsOBLMCTB/dl3lc9b+7uA1O+jHb4OuFAvVl+oOtLZmekc1JbUc36nt7pb6zK0mslL2n6+3wUZJJyuIuOm7Ps8Xyc8qP3Q+TMDj+2W73MABUatK5vg26vcVQf3navOqL+Ui7kay53dJeEG8AgPE33PEkDI6HSfZ9BRFAQJF/LSVYDSIQEBiKsE0lsRaGNSiTEl43X4SAQKWN8GUj427qG/XyAJB15IvTM+CJKW04FuoiEpd+1Grmj8BvzPIYAGwten2mm9mUsauDBIAnDvgnAHQMrHZX5/NMOguLBy07NXTPKhvVGnDhb0BH3pvfDjcelDExnpoNLormmS/3uT0KAFY0xDs2dhiLqXZsBoBThca9QK1z8mxlZPpCZZeq+2dMqi2AcGYtzOZG9dayrHoFACgiJCkTU9FAJZCtCxX7he3dvCFl60b8ta6lh2/T2Rdf2oam3gc4f2MXRLi7NOd0tq34iFS/aNFHIwBhJLGVSLRqZd3rWNYQfj+L5igOdb6YvoISNEC5LgBSDk9G6ynYScgVrbGgFMsQKSdiLIhIWSe6rGifzz/M8H/bCABjU2L781BeOCMrK5FcvfNeuexB8M1J7N+/MSEpS/n/AGH0clblBN69AAAAAElFTkSuQmCC">vaapi_picture_factory.cc - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/117.0.5938.157:media/gpu/vaapi/vaapi_picture_native_pixmap.cc;bpv=1" ADD_DATE="1661054752" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADIUlEQVQ4jW1TXWwUZRQ955ufnZ3dlm4VpE2Q+lND1cSQYDBaKY2VEkUFa1d9K4laBROEIg+mDfvkg5Bu9MWoD/hkTJdqJBFCMRENEqONRkMbIiWGWn5SjWw7OzO7szPf9UFCCnrebu7JuTc55xA3QURYKkEtXw7+1gDm0mDWBtMm+GcAnb+P0VI+lw4fTIp7C6O7dU3nlKFyisxp0TmDRpMmmyDSCqLY96D1HUQIUsxrd9nfD3VrHDbDTi/ENi5V/TCdtmlQ0Y60dmwANNXT0HpodEx+2kNUb/4e45PSUhBR/1lcw6Gvf3fGf4gmJn6NBgGgUBBFAHj+vepdKSvp2r5m/pPu7juqA4fEOTcXvhaG2KAMVjOp5MjJ4eynBOTIz7Vnzs5Jcfoiej9+1TlHAHjyneArKrl/XcVtnQLcS/A/b23J9DzUBgQRcPo84JX90VOF7JCIGFsOBLMCTB/dl3lc9b+7uA1O+jHb4OuFAvVl+oOtLZmekc1JbUc36nt7pb6zK0mslL2n6+3wUZJJyuIuOm7Ps8Xyc8qP3Q+TMDj+2W73MABUatK5vg26vcVQf3navOqL+Ui7kay53dJeEG8AgPE33PEkDI6HSfZ9BRFAQJF/LSVYDSIQEBiKsE0lsRaGNSiTEl43X4SAQKWN8GUj427qG/XyAJB15IvTM+CJKW04FuoiEpd+1Grmj8BvzPIYAGwten2mm9mUsauDBIAnDvgnAHQMrHZX5/NMOguLBy07NXTPKhvVGnDhb0BH3pvfDjcelDExnpoNLormmS/3uT0KAFY0xDs2dhiLqXZsBoBThca9QK1z8mxlZPpCZZeq+2dMqi2AcGYtzOZG9dayrHoFACgiJCkTU9FAJZCtCxX7he3dvCFl60b8ta6lh2/T2Rdf2oam3gc4f2MXRLi7NOd0tq34iFS/aNFHIwBhJLGVSLRqZd3rWNYQfj+L5igOdb6YvoISNEC5LgBSDk9G6ynYScgVrbGgFMsQKSdiLIhIWSe6rGifzz/M8H/bCABjU2L781BeOCMrK5FcvfNeuexB8M1J7N+/MSEpS/n/AGH0clblBN69AAAAAElFTkSuQmCC">vaapi_picture_native_pixmap.cc - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/117.0.5938.157:ui/ozone/platform/wayland/ozone_platform_wayland.cc;bpv=1" ADD_DATE="1661054752" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADIUlEQVQ4jW1TXWwUZRQ955ufnZ3dlm4VpE2Q+lND1cSQYDBaKY2VEkUFa1d9K4laBROEIg+mDfvkg5Bu9MWoD/hkTJdqJBFCMRENEqONRkMbIiWGWn5SjWw7OzO7szPf9UFCCnrebu7JuTc55xA3QURYKkEtXw7+1gDm0mDWBtMm+GcAnb+P0VI+lw4fTIp7C6O7dU3nlKFyisxp0TmDRpMmmyDSCqLY96D1HUQIUsxrd9nfD3VrHDbDTi/ENi5V/TCdtmlQ0Y60dmwANNXT0HpodEx+2kNUb/4e45PSUhBR/1lcw6Gvf3fGf4gmJn6NBgGgUBBFAHj+vepdKSvp2r5m/pPu7juqA4fEOTcXvhaG2KAMVjOp5MjJ4eynBOTIz7Vnzs5Jcfoiej9+1TlHAHjyneArKrl/XcVtnQLcS/A/b23J9DzUBgQRcPo84JX90VOF7JCIGFsOBLMCTB/dl3lc9b+7uA1O+jHb4OuFAvVl+oOtLZmekc1JbUc36nt7pb6zK0mslL2n6+3wUZJJyuIuOm7Ps8Xyc8qP3Q+TMDj+2W73MABUatK5vg26vcVQf3navOqL+Ui7kay53dJeEG8AgPE33PEkDI6HSfZ9BRFAQJF/LSVYDSIQEBiKsE0lsRaGNSiTEl43X4SAQKWN8GUj427qG/XyAJB15IvTM+CJKW04FuoiEpd+1Grmj8BvzPIYAGwten2mm9mUsauDBIAnDvgnAHQMrHZX5/NMOguLBy07NXTPKhvVGnDhb0BH3pvfDjcelDExnpoNLormmS/3uT0KAFY0xDs2dhiLqXZsBoBThca9QK1z8mxlZPpCZZeq+2dMqi2AcGYtzOZG9dayrHoFACgiJCkTU9FAJZCtCxX7he3dvCFl60b8ta6lh2/T2Rdf2oam3gc4f2MXRLi7NOd0tq34iFS/aNFHIwBhJLGVSLRqZd3rWNYQfj+L5igOdb6YvoISNEC5LgBSDk9G6ynYScgVrbGgFMsQKSdiLIhIWSe6rGifzz/M8H/bCABjU2L781BeOCMrK5FcvfNeuexB8M1J7N+/MSEpS/n/AGH0clblBN69AAAAAElFTkSuQmCC">ozone_platform_wayland.cc - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/117.0.5938.157:ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc;bpv=1" ADD_DATE="1661054752" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADIUlEQVQ4jW1TXWwUZRQ955ufnZ3dlm4VpE2Q+lND1cSQYDBaKY2VEkUFa1d9K4laBROEIg+mDfvkg5Bu9MWoD/hkTJdqJBFCMRENEqONRkMbIiWGWn5SjWw7OzO7szPf9UFCCnrebu7JuTc55xA3QURYKkEtXw7+1gDm0mDWBtMm+GcAnb+P0VI+lw4fTIp7C6O7dU3nlKFyisxp0TmDRpMmmyDSCqLY96D1HUQIUsxrd9nfD3VrHDbDTi/ENi5V/TCdtmlQ0Y60dmwANNXT0HpodEx+2kNUb/4e45PSUhBR/1lcw6Gvf3fGf4gmJn6NBgGgUBBFAHj+vepdKSvp2r5m/pPu7juqA4fEOTcXvhaG2KAMVjOp5MjJ4eynBOTIz7Vnzs5Jcfoiej9+1TlHAHjyneArKrl/XcVtnQLcS/A/b23J9DzUBgQRcPo84JX90VOF7JCIGFsOBLMCTB/dl3lc9b+7uA1O+jHb4OuFAvVl+oOtLZmekc1JbUc36nt7pb6zK0mslL2n6+3wUZJJyuIuOm7Ps8Xyc8qP3Q+TMDj+2W73MABUatK5vg26vcVQf3navOqL+Ui7kay53dJeEG8AgPE33PEkDI6HSfZ9BRFAQJF/LSVYDSIQEBiKsE0lsRaGNSiTEl43X4SAQKWN8GUj427qG/XyAJB15IvTM+CJKW04FuoiEpd+1Grmj8BvzPIYAGwten2mm9mUsauDBIAnDvgnAHQMrHZX5/NMOguLBy07NXTPKhvVGnDhb0BH3pvfDjcelDExnpoNLormmS/3uT0KAFY0xDs2dhiLqXZsBoBThca9QK1z8mxlZPpCZZeq+2dMqi2AcGYtzOZG9dayrHoFACgiJCkTU9FAJZCtCxX7he3dvCFl60b8ta6lh2/T2Rdf2oam3gc4f2MXRLi7NOd0tq34iFS/aNFHIwBhJLGVSLRqZd3rWNYQfj+L5igOdb6YvoISNEC5LgBSDk9G6ynYScgVrbGgFMsQKSdiLIhIWSe6rGifzz/M8H/bCABjU2L781BeOCMrK5FcvfNeuexB8M1J7N+/MSEpS/n/AGH0clblBN69AAAAAElFTkSuQmCC">gbm_pixmap_wayland.cc - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/117.0.5938.157:ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.h;bpv=1" ADD_DATE="1661054752" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADIUlEQVQ4jW1TXWwUZRQ955ufnZ3dlm4VpE2Q+lND1cSQYDBaKY2VEkUFa1d9K4laBROEIg+mDfvkg5Bu9MWoD/hkTJdqJBFCMRENEqONRkMbIiWGWn5SjWw7OzO7szPf9UFCCnrebu7JuTc55xA3QURYKkEtXw7+1gDm0mDWBtMm+GcAnb+P0VI+lw4fTIp7C6O7dU3nlKFyisxp0TmDRpMmmyDSCqLY96D1HUQIUsxrd9nfD3VrHDbDTi/ENi5V/TCdtmlQ0Y60dmwANNXT0HpodEx+2kNUb/4e45PSUhBR/1lcw6Gvf3fGf4gmJn6NBgGgUBBFAHj+vepdKSvp2r5m/pPu7juqA4fEOTcXvhaG2KAMVjOp5MjJ4eynBOTIz7Vnzs5Jcfoiej9+1TlHAHjyneArKrl/XcVtnQLcS/A/b23J9DzUBgQRcPo84JX90VOF7JCIGFsOBLMCTB/dl3lc9b+7uA1O+jHb4OuFAvVl+oOtLZmekc1JbUc36nt7pb6zK0mslL2n6+3wUZJJyuIuOm7Ps8Xyc8qP3Q+TMDj+2W73MABUatK5vg26vcVQf3navOqL+Ui7kay53dJeEG8AgPE33PEkDI6HSfZ9BRFAQJF/LSVYDSIQEBiKsE0lsRaGNSiTEl43X4SAQKWN8GUj427qG/XyAJB15IvTM+CJKW04FuoiEpd+1Grmj8BvzPIYAGwten2mm9mUsauDBIAnDvgnAHQMrHZX5/NMOguLBy07NXTPKhvVGnDhb0BH3pvfDjcelDExnpoNLormmS/3uT0KAFY0xDs2dhiLqXZsBoBThca9QK1z8mxlZPpCZZeq+2dMqi2AcGYtzOZG9dayrHoFACgiJCkTU9FAJZCtCxX7he3dvCFl60b8ta6lh2/T2Rdf2oam3gc4f2MXRLi7NOd0tq34iFS/aNFHIwBhJLGVSLRqZd3rWNYQfj+L5igOdb6YvoISNEC5LgBSDk9G6ynYScgVrbGgFMsQKSdiLIhIWSe6rGifzz/M8H/bCABjU2L781BeOCMrK5FcvfNeuexB8M1J7N+/MSEpS/n/AGH0clblBN69AAAAAElFTkSuQmCC">gbm_pixmap_wayland.h - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/117.0.5938.157:chrome/browser/about_flags.cc;bpv=1" ADD_DATE="1661054752" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADIUlEQVQ4jW1TXWwUZRQ955ufnZ3dlm4VpE2Q+lND1cSQYDBaKY2VEkUFa1d9K4laBROEIg+mDfvkg5Bu9MWoD/hkTJdqJBFCMRENEqONRkMbIiWGWn5SjWw7OzO7szPf9UFCCnrebu7JuTc55xA3QURYKkEtXw7+1gDm0mDWBtMm+GcAnb+P0VI+lw4fTIp7C6O7dU3nlKFyisxp0TmDRpMmmyDSCqLY96D1HUQIUsxrd9nfD3VrHDbDTi/ENi5V/TCdtmlQ0Y60dmwANNXT0HpodEx+2kNUb/4e45PSUhBR/1lcw6Gvf3fGf4gmJn6NBgGgUBBFAHj+vepdKSvp2r5m/pPu7juqA4fEOTcXvhaG2KAMVjOp5MjJ4eynBOTIz7Vnzs5Jcfoiej9+1TlHAHjyneArKrl/XcVtnQLcS/A/b23J9DzUBgQRcPo84JX90VOF7JCIGFsOBLMCTB/dl3lc9b+7uA1O+jHb4OuFAvVl+oOtLZmekc1JbUc36nt7pb6zK0mslL2n6+3wUZJJyuIuOm7Ps8Xyc8qP3Q+TMDj+2W73MABUatK5vg26vcVQf3navOqL+Ui7kay53dJeEG8AgPE33PEkDI6HSfZ9BRFAQJF/LSVYDSIQEBiKsE0lsRaGNSiTEl43X4SAQKWN8GUj427qG/XyAJB15IvTM+CJKW04FuoiEpd+1Grmj8BvzPIYAGwten2mm9mUsauDBIAnDvgnAHQMrHZX5/NMOguLBy07NXTPKhvVGnDhb0BH3pvfDjcelDExnpoNLormmS/3uT0KAFY0xDs2dhiLqXZsBoBThca9QK1z8mxlZPpCZZeq+2dMqi2AcGYtzOZG9dayrHoFACgiJCkTU9FAJZCtCxX7he3dvCFl60b8ta6lh2/T2Rdf2oam3gc4f2MXRLi7NOd0tq34iFS/aNFHIwBhJLGVSLRqZd3rWNYQfj+L5igOdb6YvoISNEC5LgBSDk9G6ynYScgVrbGgFMsQKSdiLIhIWSe6rGifzz/M8H/bCABjU2L781BeOCMrK5FcvfNeuexB8M1J7N+/MSEpS/n/AGH0clblBN69AAAAAElFTkSuQmCC">about_flags.cc - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/117.0.5938.157:chrome/installer/linux/debian/build.sh;bpv=1" ADD_DATE="1661054752" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADIUlEQVQ4jW1TXWwUZRQ955ufnZ3dlm4VpE2Q+lND1cSQYDBaKY2VEkUFa1d9K4laBROEIg+mDfvkg5Bu9MWoD/hkTJdqJBFCMRENEqONRkMbIiWGWn5SjWw7OzO7szPf9UFCCnrebu7JuTc55xA3QURYKkEtXw7+1gDm0mDWBtMm+GcAnb+P0VI+lw4fTIp7C6O7dU3nlKFyisxp0TmDRpMmmyDSCqLY96D1HUQIUsxrd9nfD3VrHDbDTi/ENi5V/TCdtmlQ0Y60dmwANNXT0HpodEx+2kNUb/4e45PSUhBR/1lcw6Gvf3fGf4gmJn6NBgGgUBBFAHj+vepdKSvp2r5m/pPu7juqA4fEOTcXvhaG2KAMVjOp5MjJ4eynBOTIz7Vnzs5Jcfoiej9+1TlHAHjyneArKrl/XcVtnQLcS/A/b23J9DzUBgQRcPo84JX90VOF7JCIGFsOBLMCTB/dl3lc9b+7uA1O+jHb4OuFAvVl+oOtLZmekc1JbUc36nt7pb6zK0mslL2n6+3wUZJJyuIuOm7Ps8Xyc8qP3Q+TMDj+2W73MABUatK5vg26vcVQf3navOqL+Ui7kay53dJeEG8AgPE33PEkDI6HSfZ9BRFAQJF/LSVYDSIQEBiKsE0lsRaGNSiTEl43X4SAQKWN8GUj427qG/XyAJB15IvTM+CJKW04FuoiEpd+1Grmj8BvzPIYAGwten2mm9mUsauDBIAnDvgnAHQMrHZX5/NMOguLBy07NXTPKhvVGnDhb0BH3pvfDjcelDExnpoNLormmS/3uT0KAFY0xDs2dhiLqXZsBoBThca9QK1z8mxlZPpCZZeq+2dMqi2AcGYtzOZG9dayrHoFACgiJCkTU9FAJZCtCxX7he3dvCFl60b8ta6lh2/T2Rdf2oam3gc4f2MXRLi7NOd0tq34iFS/aNFHIwBhJLGVSLRqZd3rWNYQfj+L5igOdb6YvoISNEC5LgBSDk9G6ynYScgVrbGgFMsQKSdiLIhIWSe6rGifzz/M8H/bCABjU2L781BeOCMrK5FcvfNeuexB8M1J7N+/MSEpS/n/AGH0clblBN69AAAAAElFTkSuQmCC">build.sh - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/117.0.5938.157:chrome/browser/ui/browser_commands.cc;bpv=1" ADD_DATE="1661054752" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADIUlEQVQ4jW1TXWwUZRQ955ufnZ3dlm4VpE2Q+lND1cSQYDBaKY2VEkUFa1d9K4laBROEIg+mDfvkg5Bu9MWoD/hkTJdqJBFCMRENEqONRkMbIiWGWn5SjWw7OzO7szPf9UFCCnrebu7JuTc55xA3QURYKkEtXw7+1gDm0mDWBtMm+GcAnb+P0VI+lw4fTIp7C6O7dU3nlKFyisxp0TmDRpMmmyDSCqLY96D1HUQIUsxrd9nfD3VrHDbDTi/ENi5V/TCdtmlQ0Y60dmwANNXT0HpodEx+2kNUb/4e45PSUhBR/1lcw6Gvf3fGf4gmJn6NBgGgUBBFAHj+vepdKSvp2r5m/pPu7juqA4fEOTcXvhaG2KAMVjOp5MjJ4eynBOTIz7Vnzs5Jcfoiej9+1TlHAHjyneArKrl/XcVtnQLcS/A/b23J9DzUBgQRcPo84JX90VOF7JCIGFsOBLMCTB/dl3lc9b+7uA1O+jHb4OuFAvVl+oOtLZmekc1JbUc36nt7pb6zK0mslL2n6+3wUZJJyuIuOm7Ps8Xyc8qP3Q+TMDj+2W73MABUatK5vg26vcVQf3navOqL+Ui7kay53dJeEG8AgPE33PEkDI6HSfZ9BRFAQJF/LSVYDSIQEBiKsE0lsRaGNSiTEl43X4SAQKWN8GUj427qG/XyAJB15IvTM+CJKW04FuoiEpd+1Grmj8BvzPIYAGwten2mm9mUsauDBIAnDvgnAHQMrHZX5/NMOguLBy07NXTPKhvVGnDhb0BH3pvfDjcelDExnpoNLormmS/3uT0KAFY0xDs2dhiLqXZsBoBThca9QK1z8mxlZPpCZZeq+2dMqi2AcGYtzOZG9dayrHoFACgiJCkTU9FAJZCtCxX7he3dvCFl60b8ta6lh2/T2Rdf2oam3gc4f2MXRLi7NOd0tq34iFS/aNFHIwBhJLGVSLRqZd3rWNYQfj+L5igOdb6YvoISNEC5LgBSDk9G6ynYScgVrbGgFMsQKSdiLIhIWSe6rGifzz/M8H/bCABjU2L781BeOCMrK5FcvfNeuexB8M1J7N+/MSEpS/n/AGH0clblBN69AAAAAElFTkSuQmCC">browser_commands.cc - Chromium Code Search</A>

File diff suppressed because it is too large Load Diff

View File

@ -38,6 +38,7 @@
#include "base/strings/stringprintf.h"
#include "base/task/sequenced_task_runner.h"
#include "base/types/expected.h"
#include "base/types/expected_macros.h"
#include "base/values.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
@ -52,13 +53,13 @@
#include "chrome/browser/browsing_topics/browsing_topics_service_factory.h"
#include "chrome/browser/captive_portal/captive_portal_service_factory.h"
#include "chrome/browser/child_process_host_flags.h"
#include "chrome/browser/chrome_browser_main_extra_parts_nacl_deprecation.h"
#include "chrome/browser/chrome_content_browser_client_binder_policies.h"
#include "chrome/browser/chrome_content_browser_client_parts.h"
#include "chrome/browser/content_settings/cookie_settings_factory.h"
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h"
#include "chrome/browser/data_saver/data_saver.h"
#include "chrome/browser/data_use_measurement/chrome_data_use_measurement.h"
#include "chrome/browser/defaults.h"
#include "chrome/browser/device_api/device_service_impl.h"
#include "chrome/browser/device_api/managed_configuration_service.h"
@ -85,6 +86,7 @@
#include "chrome/browser/media/webrtc/capture_policy_utils.h"
#include "chrome/browser/media/webrtc/chrome_screen_enumerator.h"
#include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
#include "chrome/browser/media/webrtc/media_device_salt_service_factory.h"
#include "chrome/browser/media/webrtc/webrtc_logging_controller.h"
#include "chrome/browser/memory/chrome_browser_main_extra_parts_memory.h"
#include "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h"
@ -113,7 +115,9 @@
#include "chrome/browser/preloading/prefetch/search_prefetch/field_trial_settings.h"
#include "chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader.h"
#include "chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_url_loader_interceptor.h"
#include "chrome/browser/preloading/prerender/prerender_web_contents_delegate.h"
#include "chrome/browser/privacy_sandbox/privacy_sandbox_settings_factory.h"
#include "chrome/browser/private_network_access/chrome_private_network_device_delegate.h"
#include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_io_data.h"
@ -141,8 +145,6 @@
#include "chrome/browser/speech/chrome_speech_recognition_manager_delegate.h"
#include "chrome/browser/ssl/chrome_security_blocking_page_factory.h"
#include "chrome/browser/ssl/https_defaulted_callbacks.h"
#include "chrome/browser/ssl/https_only_mode_navigation_throttle.h"
#include "chrome/browser/ssl/https_only_mode_upgrade_interceptor.h"
#include "chrome/browser/ssl/https_upgrades_interceptor.h"
#include "chrome/browser/ssl/https_upgrades_navigation_throttle.h"
#include "chrome/browser/ssl/sct_reporting_service.h"
@ -187,6 +189,7 @@
#include "chrome/common/google_url_loader_throttle.h"
#include "chrome/common/logging_chrome.h"
#include "chrome/common/pdf_util.h"
#include "chrome/common/ppapi_utils.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/profiler/thread_profiler_configuration.h"
#include "chrome/common/renderer_configuration.mojom.h"
@ -202,7 +205,7 @@
#include "components/content_settings/browser/page_specific_content_settings.h"
#include "components/content_settings/core/browser/cookie_settings.h"
#include "components/content_settings/core/browser/host_content_settings_map.h"
#include "components/content_settings/core/browser/local_network_settings.h"
#include "components/content_settings/core/browser/private_network_settings.h"
#include "components/content_settings/core/common/content_settings.h"
#include "components/content_settings/core/common/content_settings_types.h"
#include "components/custom_handlers/protocol_handler_registry.h"
@ -224,6 +227,7 @@
#include "components/language/core/browser/pref_names.h"
#include "components/lens/buildflags.h"
#include "components/live_caption/caption_util.h"
#include "components/media_device_salt/media_device_salt_service.h"
#include "components/media_router/browser/presentation/presentation_service_delegate_impl.h"
#include "components/media_router/browser/presentation/receiver_presentation_service_delegate_impl.h"
#include "components/media_router/browser/presentation/web_contents_presentation_manager.h"
@ -357,6 +361,7 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/page_transition_types.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/color/color_provider_key.h"
#include "ui/gfx/switches.h"
#include "ui/native_theme/native_theme.h"
#include "url/gurl.h"
@ -390,6 +395,8 @@
#include "ash/constants/ash_switches.h"
#include "ash/public/cpp/tablet_mode.h"
#include "ash/webui/camera_app_ui/url_constants.h"
#include "ash/webui/help_app_ui/url_constants.h"
#include "ash/webui/media_app_ui/url_constants.h"
#include "ash/webui/scanning/url_constants.h"
#include "chrome/app/chrome_crash_reporter_client.h"
#include "chrome/browser/ash/arc/fileapi/arc_content_file_system_backend_delegate.h"
@ -419,6 +426,7 @@
#include "chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.h"
#include "chrome/browser/ui/browser_dialogs.h"
#include "chrome/browser/ui/webui/ash/kerberos/kerberos_in_browser_dialog.h"
#include "chrome/common/webui_url_constants.h"
#include "chromeos/ash/services/network_health/public/cpp/network_health_helper.h"
#include "components/crash/core/app/breakpad_linux.h"
#include "components/user_manager/user.h"
@ -469,6 +477,7 @@
#include "chrome/browser/chromeos/enterprise/incognito_navigation_throttle.h"
#include "chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.h"
#include "chrome/browser/chromeos/tablet_mode/chrome_content_browser_client_tablet_mode_part.h"
#include "chrome/browser/file_system_access/cloud_identifier/cloud_identifier_util_cros.h"
#include "chrome/browser/policy/networking/policy_cert_service.h"
#include "chrome/browser/policy/networking/policy_cert_service_factory.h"
#include "chrome/browser/smart_card/chromeos_smart_card_delegate.h"
@ -503,6 +512,7 @@
#include "chrome/browser/web_applications/web_app_helpers.h"
#include "chrome/browser/web_applications/web_app_provider.h"
#include "chrome/browser/web_applications/web_app_registrar.h"
#include "chrome/browser/web_applications/web_app_utils.h"
#include "chrome/browser/webauthn/authenticator_request_scheduler.h"
#include "chrome/browser/webauthn/chrome_authenticator_request_delegate.h"
#include "chrome/grit/chrome_unscaled_resources.h" // nogncheck crbug.com/1125897
@ -540,11 +550,9 @@
#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) ||
// BUILDFLAG(IS_CHROMEOS_ASH)
// TODO(crbug.com/939205): Once the upcoming App Service is available, use a
// single navigation throttle to display the intent picker on all platforms.
#if !BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(IS_CHROMEOS)
#include "chrome/browser/apps/intent_helper/common_apps_navigation_throttle.h"
#include "chrome/browser/apps/intent_helper/chromeos_apps_navigation_throttle.h"
#include "chrome/browser/policy/system_features_disable_list_policy_handler.h"
#else
#include "chrome/browser/apps/intent_helper/apps_navigation_throttle.h"
@ -880,7 +888,7 @@ bool HandleNewTabPageLocationOverride(
// Don't change the URL when incognito mode.
if (profile->IsOffTheRecord())
if (!base::CommandLine::ForCurrentProcess()->HasSwitch("custom-ntp"))
if (!base::CommandLine::ForCurrentProcess()->HasSwitch("custom-ntp"))
return false;
std::string ntp_location =
@ -1584,6 +1592,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
prefs::kThrottleNonVisibleCrossOriginIframesAllowed, true);
registry->RegisterBooleanPref(prefs::kNewBaseUrlInheritanceBehaviorAllowed,
true);
registry->RegisterBooleanPref(prefs::kNativeClientForceAllowed, false);
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)
registry->RegisterBooleanPref(prefs::kOutOfProcessSystemDnsResolutionEnabled,
true);
@ -1665,6 +1674,9 @@ void ChromeContentBrowserClient::RegisterProfilePrefs(
kAllowBackForwardCacheForCacheControlNoStorePageEnabled,
true);
registry->RegisterBooleanPref(
policy::policy_prefs::kForcePermissionPolicyUnloadDefaultEnabled, true);
#if BUILDFLAG(IS_CHROMEOS)
registry->RegisterListPref(prefs::kMandatoryExtensionsForIncognitoNavigation);
#endif
@ -1805,6 +1817,9 @@ ChromeContentBrowserClient::CreateBrowserMainParts(bool is_integration_test) {
main_parts->AddParts(
std::make_unique<ChromeBrowserMainExtraPartsOptimizationGuide>());
main_parts->AddParts(
std::make_unique<ChromeBrowserMainExtraPartsNaclDeprecation>());
return main_parts;
}
@ -1856,13 +1871,12 @@ ChromeContentBrowserClient::GetStoragePartitionConfigForSite(
if (content::SiteIsolationPolicy::ShouldUrlUseApplicationIsolationLevel(
browser_context, site)) {
CHECK(site.SchemeIs(chrome::kIsolatedAppScheme));
const base::expected<web_app::IsolatedWebAppUrlInfo, std::string>
iwa_url_info = web_app::IsolatedWebAppUrlInfo::Create(site);
if (!iwa_url_info.has_value()) {
LOG(ERROR) << "Invalid isolated-app URL: " << site;
return default_storage_partition_config;
}
return iwa_url_info->storage_partition_config(browser_context);
ASSIGN_OR_RETURN(const auto iwa_url_info,
web_app::IsolatedWebAppUrlInfo::Create(site), [&](auto) {
LOG(ERROR) << "Invalid isolated-app URL: " << site;
return default_storage_partition_config;
});
return iwa_url_info.storage_partition_config(browser_context);
}
#endif
@ -1914,8 +1928,10 @@ void ChromeContentBrowserClient::RenderProcessWillLaunch(
audio_debug_recordings_handler));
#if BUILDFLAG(ENABLE_NACL)
host->AddFilter(new nacl::NaClHostMessageFilter(
host->GetID(), profile->IsOffTheRecord(), profile->GetPath()));
if (IsNaclAllowed() && !profile->IsSystemProfile()) {
host->AddFilter(new nacl::NaClHostMessageFilter(
host->GetID(), profile->IsOffTheRecord(), profile->GetPath()));
}
#endif
#if BUILDFLAG(IS_ANDROID)
@ -2098,9 +2114,8 @@ bool ChromeContentBrowserClient::ShouldTreatURLSchemeAsFirstPartyWhenTopLevel(
// This is needed to bypass the normal SameSite rules for any chrome:// page
// embedding a secure origin, regardless of the registrable domains of any
// intervening frames. For example, this is needed for browser UI to interact
// with SameSite cookies on accounts.google.com, which are used for logging
// into Cloud Print from chrome://print, for displaying a list of available
// accounts on the NTP (chrome://new-tab-page), etc.
// with SameSite cookies on accounts.google.com, which is used for displaying
// a list of available accounts on the NTP (chrome://new-tab-page), etc.
if (is_embedded_origin_secure && scheme == content::kChromeUIScheme)
return true;
#if BUILDFLAG(ENABLE_EXTENSIONS)
@ -2147,11 +2162,8 @@ void ChromeContentBrowserClient::OverrideURLLoaderFactoryParams(
bool is_for_isolated_world,
network::mojom::URLLoaderFactoryParams* factory_params) {
#if BUILDFLAG(IS_ANDROID)
if (base::FeatureList::IsEnabled(
network::features::kLessChattyNetworkService)) {
// Loading state text isn't used on Android, only in desktop UI.
factory_params->provide_loading_state_updates = false;
}
// Loading state text isn't used on Android, only in desktop UI.
factory_params->provide_loading_state_updates = false;
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS)
@ -2186,12 +2198,12 @@ void ChromeContentBrowserClient::GetAdditionalViewSourceSchemes(
network::mojom::IPAddressSpace
ChromeContentBrowserClient::DetermineAddressSpaceFromURL(const GURL& url) {
if (url.SchemeIs(chrome::kChromeSearchScheme))
return network::mojom::IPAddressSpace::kLoopback;
return network::mojom::IPAddressSpace::kLocal;
if (url.SchemeIs(dom_distiller::kDomDistillerScheme))
return network::mojom::IPAddressSpace::kPublic;
#if BUILDFLAG(ENABLE_EXTENSIONS)
if (url.SchemeIs(extensions::kExtensionScheme))
return network::mojom::IPAddressSpace::kLoopback;
return network::mojom::IPAddressSpace::kLocal;
#endif
return network::mojom::IPAddressSpace::kUnknown;
@ -2675,15 +2687,13 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
embedder_support::kUserAgent,
switches::kUserDataDir, // Make logs go to the right file.
};
command_line->CopySwitchesFrom(browser_command_line, kCommonSwitchNames,
std::size(kCommonSwitchNames));
command_line->CopySwitchesFrom(browser_command_line, kCommonSwitchNames);
static const char* const kDinosaurEasterEggSwitches[] = {
error_page::switches::kDisableDinosaurEasterEgg,
};
command_line->CopySwitchesFrom(browser_command_line,
kDinosaurEasterEggSwitches,
std::size(kDinosaurEasterEggSwitches));
kDinosaurEasterEggSwitches);
#if BUILDFLAG(IS_CHROMEOS_ASH)
// On Chrome OS need to pass primary user homedir (in multi-profiles session).
@ -2746,6 +2756,15 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
switches::kDisableBackForwardCacheForCacheControlNoStorePage);
}
// The policy is "enabled" to follow policy naming convention but the
// switch is "disable" because we want the default to have no switch since
// this is the default case.
if (!prefs->GetBoolean(policy::policy_prefs::
kForcePermissionPolicyUnloadDefaultEnabled)) {
command_line->AppendSwitch(
blink::switches::kForcePermissionPolicyUnloadDefaultEnabled);
}
#if !BUILDFLAG(IS_ANDROID)
InstantService* instant_service =
InstantServiceFactory::GetForProfile(profile);
@ -2907,6 +2926,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
switches::kAllowInsecureLocalhost,
switches::kAppsGalleryURL,
switches::kDisableJavaScriptHarmonyShipping,
switches::kDisableNaCl,
variations::switches::kEnableBenchmarking,
switches::kEnableDistillabilityService,
switches::kEnableNaCl,
@ -2942,8 +2962,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
}
#endif
command_line->CopySwitchesFrom(browser_command_line, kSwitchNames,
std::size(kSwitchNames));
command_line->CopySwitchesFrom(browser_command_line, kSwitchNames);
} else if (process_type == switches::kUtilityProcess) {
#if BUILDFLAG(ENABLE_EXTENSIONS)
static const char* const kSwitchNames[] = {
@ -2961,8 +2980,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
<< "\" instead";
}
command_line->CopySwitchesFrom(browser_command_line, kSwitchNames,
std::size(kSwitchNames));
command_line->CopySwitchesFrom(browser_command_line, kSwitchNames);
#endif
MaybeAppendSecureOriginsAllowlistSwitch(command_line);
} else if (process_type == switches::kZygoteProcess) {
@ -2974,22 +2992,19 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
switches::kVerboseLoggingInNacl,
};
command_line->CopySwitchesFrom(browser_command_line, kSwitchNames,
std::size(kSwitchNames));
command_line->CopySwitchesFrom(browser_command_line, kSwitchNames);
#endif
#if BUILDFLAG(IS_CHROMEOS_LACROS)
// Ensure zygote loads the resource bundle for the right locale.
static const char* const kMoreSwitchNames[] = {switches::kLang};
command_line->CopySwitchesFrom(browser_command_line, kMoreSwitchNames,
std::size(kMoreSwitchNames));
command_line->CopySwitchesFrom(browser_command_line, kMoreSwitchNames);
#endif
#if BUILDFLAG(IS_CHROMEOS)
// This is called before feature flags are parsed, so pass them in their raw
// form.
static const char* const kMoreCrOSSwitchNames[] = {
chromeos::switches::kFeatureFlags};
command_line->CopySwitchesFrom(browser_command_line, kMoreCrOSSwitchNames,
std::size(kMoreCrOSSwitchNames));
command_line->CopySwitchesFrom(browser_command_line, kMoreCrOSSwitchNames);
#endif
} else if (process_type == switches::kGpuProcess) {
// If --ignore-gpu-blocklist is passed in, don't send in crash reports
@ -3004,8 +3019,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
static const char* const kSwitchNames[] = {
crash_reporter::switches::kCrashLoopBefore,
};
command_line->CopySwitchesFrom(browser_command_line, kSwitchNames,
std::size(kSwitchNames));
command_line->CopySwitchesFrom(browser_command_line, kSwitchNames);
}
#endif
@ -3091,9 +3105,10 @@ ChromeContentBrowserClient::AllowServiceWorker(
#endif
Profile* profile = Profile::FromBrowserContext(context);
scoped_refptr<content_settings::CookieSettings> cookie_settings =
CookieSettingsFactory::GetForProfile(profile);
return embedder_support::AllowServiceWorker(
scope, site_for_cookies, top_frame_origin,
CookieSettingsFactory::GetForProfile(profile).get(),
scope, site_for_cookies, top_frame_origin, cookie_settings.get(),
HostContentSettingsMapFactory::GetForProfile(profile));
}
@ -3113,6 +3128,22 @@ bool ChromeContentBrowserClient::MayDeleteServiceWorkerRegistration(
return true;
}
bool ChromeContentBrowserClient::ShouldTryToUpdateServiceWorkerRegistration(
const GURL& scope,
content::BrowserContext* browser_context) {
DCHECK(browser_context);
DCHECK_CURRENTLY_ON(BrowserThread::UI);
#if BUILDFLAG(ENABLE_EXTENSIONS)
if (!ChromeContentBrowserClientExtensionsPart::
ShouldTryToUpdateServiceWorkerRegistration(scope, browser_context)) {
return false;
}
#endif
return true;
}
void ChromeContentBrowserClient::
UpdateEnabledBlinkRuntimeFeaturesInIsolatedWorker(
content::BrowserContext* context,
@ -3143,11 +3174,12 @@ bool ChromeContentBrowserClient::AllowSharedWorker(
DCHECK_CURRENTLY_ON(BrowserThread::UI);
// Check if cookies are allowed.
scoped_refptr<content_settings::CookieSettings> cookie_settings =
CookieSettingsFactory::GetForProfile(
Profile::FromBrowserContext(context));
return embedder_support::AllowSharedWorker(
worker_url, site_for_cookies, top_frame_origin, name, storage_key,
render_process_id, render_frame_id,
CookieSettingsFactory::GetForProfile(Profile::FromBrowserContext(context))
.get());
render_process_id, render_frame_id, cookie_settings.get());
}
bool ChromeContentBrowserClient::DoesSchemeAllowCrossOriginSharedWorker(
@ -3196,11 +3228,11 @@ void ChromeContentBrowserClient::AllowWorkerFileSystem(
base::OnceCallback<void(bool)> callback) {
// An empty list is passed for render_frames here since we manually notify
// PageSpecificContentSettings that the file system was accessed below.
bool allow = embedder_support::AllowWorkerFileSystem(
url, {},
scoped_refptr<content_settings::CookieSettings> cookie_settings =
CookieSettingsFactory::GetForProfile(
Profile::FromBrowserContext(browser_context))
.get());
Profile::FromBrowserContext(browser_context));
bool allow =
embedder_support::AllowWorkerFileSystem(url, {}, cookie_settings.get());
#if BUILDFLAG(ENABLE_EXTENSIONS)
GuestPermissionRequestHelper(url, render_frames, std::move(callback), allow);
#else
@ -3252,10 +3284,14 @@ void ChromeContentBrowserClient::FileSystemAccessed(
bool allow) {
// Record access to file system for potential display in UI.
for (const auto& it : render_frames) {
auto* rfh = content::RenderFrameHost::FromID(it);
if (!rfh) {
continue;
}
content_settings::PageSpecificContentSettings::StorageAccessed(
content_settings::mojom::ContentSettingsManager::StorageType::
FILE_SYSTEM,
it.child_id, it.frame_routing_id, url, !allow);
it.child_id, it.frame_routing_id, rfh->GetStorageKey(), !allow);
}
std::move(callback).Run(allow);
}
@ -3264,32 +3300,32 @@ bool ChromeContentBrowserClient::AllowWorkerIndexedDB(
const GURL& url,
content::BrowserContext* browser_context,
const std::vector<content::GlobalRenderFrameHostId>& render_frames) {
return embedder_support::AllowWorkerIndexedDB(
url, render_frames,
scoped_refptr<content_settings::CookieSettings> cookie_settings =
CookieSettingsFactory::GetForProfile(
Profile::FromBrowserContext(browser_context))
.get());
Profile::FromBrowserContext(browser_context));
return embedder_support::AllowWorkerIndexedDB(url, render_frames,
cookie_settings.get());
}
bool ChromeContentBrowserClient::AllowWorkerCacheStorage(
const GURL& url,
content::BrowserContext* browser_context,
const std::vector<content::GlobalRenderFrameHostId>& render_frames) {
return embedder_support::AllowWorkerCacheStorage(
url, render_frames,
scoped_refptr<content_settings::CookieSettings> cookie_settings =
CookieSettingsFactory::GetForProfile(
Profile::FromBrowserContext(browser_context))
.get());
Profile::FromBrowserContext(browser_context));
return embedder_support::AllowWorkerCacheStorage(url, render_frames,
cookie_settings.get());
}
bool ChromeContentBrowserClient::AllowWorkerWebLocks(
const GURL& url,
content::BrowserContext* browser_context,
const std::vector<content::GlobalRenderFrameHostId>& render_frames) {
return embedder_support::AllowWorkerWebLocks(
url, CookieSettingsFactory::GetForProfile(
Profile::FromBrowserContext(browser_context))
.get());
scoped_refptr<content_settings::CookieSettings> cookie_settings =
CookieSettingsFactory::GetForProfile(
Profile::FromBrowserContext(browser_context));
return embedder_support::AllowWorkerWebLocks(url, cookie_settings.get());
}
ChromeContentBrowserClient::AllowWebBluetoothResult
@ -3336,15 +3372,8 @@ bool ChromeContentBrowserClient::IsInterestGroupAPIAllowed(
PrivacySandboxSettingsFactory::GetForProfile(profile);
DCHECK(privacy_sandbox_settings);
// Join operations are subject to an additional check.
bool join_blocked =
operation == InterestGroupApiOperation::kJoin
? !privacy_sandbox_settings->IsFledgeJoiningAllowed(top_frame_origin)
: false;
bool allowed =
privacy_sandbox_settings->IsFledgeAllowed(top_frame_origin, api_origin) &&
!join_blocked;
bool allowed = privacy_sandbox_settings->IsFledgeAllowed(
top_frame_origin, api_origin, operation, render_frame_host);
if (operation == InterestGroupApiOperation::kJoin) {
content_settings::PageSpecificContentSettings::InterestGroupJoined(
@ -3413,7 +3442,7 @@ bool ChromeContentBrowserClient::IsAttributionReportingOperationAllowed(
DCHECK(source_origin);
DCHECK(reporting_origin);
bool allowed = privacy_sandbox_settings->IsAttributionReportingAllowed(
*source_origin, *reporting_origin);
*source_origin, *reporting_origin, rfh);
if (rfh) {
content_settings::PageSpecificContentSettings::BrowsingDataAccessed(
rfh, content::AttributionDataModel::DataKey(*reporting_origin),
@ -3427,13 +3456,13 @@ bool ChromeContentBrowserClient::IsAttributionReportingOperationAllowed(
DCHECK(source_origin);
DCHECK(reporting_origin);
return privacy_sandbox_settings->IsAttributionReportingAllowed(
*source_origin, *reporting_origin);
*source_origin, *reporting_origin, rfh);
case AttributionReportingOperation::kTrigger:
case AttributionReportingOperation::kOsTrigger: {
DCHECK(destination_origin);
DCHECK(reporting_origin);
bool allowed = privacy_sandbox_settings->IsAttributionReportingAllowed(
*destination_origin, *reporting_origin);
*destination_origin, *reporting_origin, rfh);
if (rfh) {
content_settings::PageSpecificContentSettings::BrowsingDataAccessed(
rfh, content::AttributionDataModel::DataKey(*reporting_origin),
@ -3447,13 +3476,13 @@ bool ChromeContentBrowserClient::IsAttributionReportingOperationAllowed(
DCHECK(destination_origin);
DCHECK(reporting_origin);
return privacy_sandbox_settings->IsAttributionReportingAllowed(
*destination_origin, *reporting_origin);
*destination_origin, *reporting_origin, rfh);
case AttributionReportingOperation::kReport:
DCHECK(source_origin);
DCHECK(destination_origin);
DCHECK(reporting_origin);
return privacy_sandbox_settings->MaySendAttributionReport(
*source_origin, *destination_origin, *reporting_origin);
*source_origin, *destination_origin, *reporting_origin, rfh);
case AttributionReportingOperation::kAny:
return privacy_sandbox_settings->IsAttributionReportingEverAllowed();
}
@ -3469,7 +3498,7 @@ bool ChromeContentBrowserClient::IsSharedStorageAllowed(
PrivacySandboxSettingsFactory::GetForProfile(profile);
DCHECK(privacy_sandbox_settings);
bool allowed = privacy_sandbox_settings->IsSharedStorageAllowed(
top_frame_origin, accessing_origin);
top_frame_origin, accessing_origin, rfh);
if (rfh) {
content_settings::PageSpecificContentSettings::BrowsingDataAccessed(
rfh, blink::StorageKey::CreateFirstParty(accessing_origin),
@ -3691,8 +3720,7 @@ bool UpdatePreferredColorScheme(WebPreferences* web_prefs,
// If color scheme is not forced, WebUI should track the color mode of the
// ColorProvider associated with `web_contents`.
web_prefs->preferred_color_scheme =
web_contents->GetColorMode() ==
ui::ColorProviderManager::ColorMode::kLight
web_contents->GetColorMode() == ui::ColorProviderKey::ColorMode::kLight
? blink::mojom::PreferredColorScheme::kLight
: blink::mojom::PreferredColorScheme::kDark;
}
@ -3735,21 +3763,23 @@ bool ShouldPromptOnMultipleMatchingCertificates(const Profile* profile) {
} // namespace
base::OnceClosure ChromeContentBrowserClient::SelectClientCertificate(
content::BrowserContext* browser_context,
content::WebContents* web_contents,
net::SSLCertRequestInfo* cert_request_info,
net::ClientCertIdentityList client_certs,
std::unique_ptr<content::ClientCertificateDelegate> delegate) {
prerender::NoStatePrefetchContents* no_state_prefetch_contents =
prerender::ChromeNoStatePrefetchContentsDelegate::FromWebContents(
web_contents);
web_contents
? prerender::ChromeNoStatePrefetchContentsDelegate::FromWebContents(
web_contents)
: nullptr;
if (no_state_prefetch_contents) {
no_state_prefetch_contents->Destroy(
prerender::FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED);
return base::OnceClosure();
}
Profile* profile =
Profile::FromBrowserContext(web_contents->GetBrowserContext());
Profile* profile = Profile::FromBrowserContext(browser_context);
#if BUILDFLAG(IS_CHROMEOS_ASH)
// On the sign-in or lock screen profile, only allow client certs in the
// context of the sign-in frame.
@ -3760,6 +3790,18 @@ base::OnceClosure ChromeContentBrowserClient::SelectClientCertificate(
const char* profile_name = ash::ProfileHelper::IsSigninProfile(profile)
? "sign-in"
: "lock screen";
// TODO(b/290262513): See also comment below -- if the continuation should
// be a cancelation, this check is unnecessary and we can just fall-through
// without treating signin profiles differently for service workers.
if (!web_contents) {
LOG(WARNING) << "Client cert requested in " << profile_name
<< " profile from service worker. This is not supported.";
// Return without calling anything on `delegate`. This results in the
// `delegate` being deleted, which implicitly calls to cancel the request.
return base::OnceClosure();
}
content::StoragePartition* storage_partition =
profile->GetStoragePartition(web_contents->GetSiteInstance());
auto* signin_partition_manager =
@ -3771,6 +3813,8 @@ base::OnceClosure ChromeContentBrowserClient::SelectClientCertificate(
<< " profile in wrong context.";
// Continue without client certificate. We do this to mimic the case of no
// client certificate being present in the profile's certificate store.
// TODO(b/290262513): Should this be a cancel? Selecting "no certificate"
// is a sticky decision.
delegate->ContinueWithCertificate(nullptr, nullptr);
return base::OnceClosure();
}
@ -3808,6 +3852,19 @@ base::OnceClosure ChromeContentBrowserClient::SelectClientCertificate(
return base::OnceClosure();
}
// At this point, we're going to either a) continue without a valid
// certificate (if we're not allowed to prompt) or b) show the picker for the
// user to select a valid cert. Only do this if the requestor has a valid
// WebContents. In the case of a), we want to preserve consistency (so that
// requests always fail or succeed across different platforms and contexts),
// and for b), we don't want to pop up UI for background requests like
// service workers (where there's no visual context to the user).
if (!web_contents) {
// Return without calling anything on `delegate`. This results in the
// `delegate` being deleted, which implicitly calls to cancel the request.
return base::OnceClosure();
}
if (matching_certificates.empty() &&
!CanPromptWithNonmatchingCertificates(profile)) {
LOG(WARNING) << "No client cert matched by policy and user selection is "
@ -3825,6 +3882,7 @@ base::OnceClosure ChromeContentBrowserClient::SelectClientCertificate(
net::ClientCertIdentityList client_cert_choices =
!matching_certificates.empty() ? std::move(matching_certificates)
: std::move(nonmatching_certificates);
return chrome::ShowSSLClientCertificateSelector(
web_contents, cert_request_info, std::move(client_cert_choices),
std::move(delegate));
@ -4248,6 +4306,15 @@ void ChromeContentBrowserClient::OverrideWebkitPrefs(
prefs->GetBoolean(prefs::kWebXRImmersiveArEnabled);
#endif
// Only set `databases_enabled` if disabled. Otherwise check blink::feature
// settings for Origin Trial and Chrome flag settings, or prefs setting
// for Enterprise Policy.
web_prefs->databases_enabled =
!web_prefs->databases_enabled
? false
: (base::FeatureList::IsEnabled(blink::features::kWebSQLAccess) ||
prefs->GetBoolean(storage::kWebSQLAccess));
#if BUILDFLAG(IS_FUCHSIA)
// Disable WebSQL support since it is being removed from the web platform
// and does not work. See crbug.com/1317431.
@ -4394,6 +4461,16 @@ base::FilePath ChromeContentBrowserClient::GetFirstPartySetsDirectory() {
return user_data_dir;
}
absl::optional<base::FilePath>
ChromeContentBrowserClient::GetLocalTracesDirectory() {
base::FilePath user_data_dir;
if (!base::PathService::Get(chrome::DIR_LOCAL_TRACES, &user_data_dir)) {
return absl::nullopt;
}
DCHECK(!user_data_dir.empty());
return user_data_dir;
}
void ChromeContentBrowserClient::DidCreatePpapiPlugin(
content::BrowserPpapiHost* browser_host) {
#if BUILDFLAG(ENABLE_PLUGINS)
@ -4961,7 +5038,7 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
#if !BUILDFLAG(IS_ANDROID)
auto url_to_apps_throttle =
#if BUILDFLAG(IS_CHROMEOS)
apps::CommonAppsNavigationThrottle::MaybeCreate(handle);
apps::ChromeOsAppsNavigationThrottle::MaybeCreate(handle);
#else
apps::AppsNavigationThrottle::MaybeCreate(handle);
#endif
@ -4969,14 +5046,20 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
throttles.push_back(std::move(url_to_apps_throttle));
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS)
throttles.push_back(
std::make_unique<extensions::ExtensionNavigationThrottle>(handle));
Profile* profile = Profile::FromBrowserContext(
handle->GetWebContents()->GetBrowserContext());
MaybeAddThrottle(extensions::ExtensionsBrowserClient::Get()
->GetUserScriptListener()
->CreateNavigationThrottle(handle),
&throttles);
#if BUILDFLAG(ENABLE_EXTENSIONS)
if (!ChromeContentBrowserClientExtensionsPart::
AreExtensionsDisabledForProfile(profile)) {
throttles.push_back(
std::make_unique<extensions::ExtensionNavigationThrottle>(handle));
MaybeAddThrottle(extensions::ExtensionsBrowserClient::Get()
->GetUserScriptListener()
->CreateNavigationThrottle(handle),
&throttles);
}
#endif
#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
@ -5098,9 +5181,7 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
#endif
#if BUILDFLAG(IS_MAC)
if (__builtin_available(macOS 10.15, *)) {
MaybeAddThrottle(MaybeCreateAuthSessionThrottleFor(handle), &throttles);
}
MaybeAddThrottle(MaybeCreateAuthSessionThrottleFor(handle), &throttles);
#endif
auto* performance_manager_registry =
@ -5111,9 +5192,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
&throttles);
}
Profile* profile = Profile::FromBrowserContext(
handle->GetWebContents()->GetBrowserContext());
if (profile && profile->GetPrefs()) {
MaybeAddThrottle(
security_interstitials::InsecureFormNavigationThrottle::
@ -5162,20 +5240,12 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
&throttles);
#endif
if (profile && profile->GetPrefs()) {
if (base::FeatureList::IsEnabled(features::kHttpsFirstModeV2)) {
MaybeAddThrottle(
HttpsUpgradesNavigationThrottle::MaybeCreateThrottleFor(
handle, std::make_unique<ChromeSecurityBlockingPageFactory>(),
profile),
&throttles);
} else {
MaybeAddThrottle(
HttpsOnlyModeNavigationThrottle::MaybeCreateThrottleFor(
handle, std::make_unique<ChromeSecurityBlockingPageFactory>(),
profile->GetPrefs()),
&throttles);
}
if (profile) {
MaybeAddThrottle(
HttpsUpgradesNavigationThrottle::MaybeCreateThrottleFor(
handle, std::make_unique<ChromeSecurityBlockingPageFactory>(),
profile),
&throttles);
}
MaybeAddThrottle(MaybeCreateNavigationAblationThrottle(handle), &throttles);
@ -5403,8 +5473,7 @@ void ChromeContentBrowserClient::MaybeCopyDisableWebRtcEncryptionSwitch(
static const char* const kWebRtcDevSwitchNames[] = {
switches::kDisableWebRtcEncryption,
};
to_command_line->CopySwitchesFrom(from_command_line, kWebRtcDevSwitchNames,
std::size(kWebRtcDevSwitchNames));
to_command_line->CopySwitchesFrom(from_command_line, kWebRtcDevSwitchNames);
}
}
@ -5468,7 +5537,8 @@ ChromeContentBrowserClient::MaybeCreateSafeBrowsingURLLoaderThrottle(
safe_browsing::hash_realtime_utils::HashRealTimeSelection
hash_realtime_selection =
safe_browsing::hash_realtime_utils::DetermineHashRealTimeSelection(
profile->IsOffTheRecord(), profile->GetPrefs());
profile->IsOffTheRecord(), profile->GetPrefs(),
/*log_usage_histograms=*/true);
return safe_browsing::BrowserURLLoaderThrottle::Create(
base::BindOnce(
@ -5736,6 +5806,17 @@ void ChromeContentBrowserClient::
DCHECK(browser_context);
DCHECK(factories);
#if !BUILDFLAG(IS_ANDROID)
if (content::IsolatedWebAppsPolicy::AreIsolatedWebAppsEnabled(
browser_context) &&
!browser_context->ShutdownStarted()) {
factories->emplace(
chrome::kIsolatedAppScheme,
web_app::IsolatedWebAppURLLoaderFactory::CreateForServiceWorker(
browser_context));
}
#endif // !BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(ENABLE_EXTENSIONS)
DCHECK(!ChromeContentBrowserClientExtensionsPart::
AreExtensionsDisabledForProfile(browser_context));
@ -5876,6 +5957,19 @@ bool IsSystemFeatureURLDisabled(const GURL& url) {
if (url.DomainIs(ash::kChromeUICameraAppHost)) {
return IsSystemFeatureDisabled(policy::SystemFeature::kCamera);
}
if (url.DomainIs(ash::kChromeUIHelpAppHost)) {
return IsSystemFeatureDisabled(policy::SystemFeature::kExplore);
}
if (url.DomainIs(ash::kChromeUIMediaAppHost)) {
return IsSystemFeatureDisabled(policy::SystemFeature::kGallery);
}
if (url.DomainIs(chrome::kChromeUIUntrustedTerminalHost)) {
return IsSystemFeatureDisabled(policy::SystemFeature::kTerminal);
}
#endif
return false;
@ -6140,16 +6234,11 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors(
interceptors.push_back(std::make_unique<SearchPrefetchURLLoaderInterceptor>(
frame_tree_node_id, navigation_id, navigation_response_task_runner));
if (base::FeatureList::IsEnabled(features::kHttpsFirstModeV2)) {
auto https_upgrades_interceptor =
HttpsUpgradesInterceptor::MaybeCreateInterceptor(frame_tree_node_id,
navigation_ui_data);
if (https_upgrades_interceptor) {
interceptors.push_back(std::move(https_upgrades_interceptor));
}
} else {
interceptors.push_back(
std::make_unique<HttpsOnlyModeUpgradeInterceptor>(frame_tree_node_id));
auto https_upgrades_interceptor =
HttpsUpgradesInterceptor::MaybeCreateInterceptor(frame_tree_node_id,
navigation_ui_data);
if (https_upgrades_interceptor) {
interceptors.push_back(std::move(https_upgrades_interceptor));
}
return interceptors;
@ -6439,6 +6528,15 @@ content::UsbDelegate* ChromeContentBrowserClient::GetUsbDelegate() {
return usb_delegate_.get();
}
content::PrivateNetworkDeviceDelegate*
ChromeContentBrowserClient::GetPrivateNetworkDeviceDelegate() {
if (!private_network_device_delegate_) {
private_network_device_delegate_ =
std::make_unique<ChromePrivateNetworkDeviceDelegate>();
}
return private_network_device_delegate_.get();
}
#if !BUILDFLAG(IS_ANDROID)
void ChromeContentBrowserClient::CreateDeviceInfoService(
content::RenderFrameHost* render_frame_host,
@ -6711,21 +6809,6 @@ bool ChromeContentBrowserClient::HandleWebUI(
}
#endif
#if !BUILDFLAG(IS_ANDROID)
// TODO(crbug.com/1420597): Remove this after feature is launched.
// Redirect from old Password Manager UI in settings to new UI.
if (base::FeatureList::IsEnabled(
password_manager::features::kPasswordManagerRedesign)) {
if (url->SchemeIs(content::kChromeUIScheme) &&
url->DomainIs(chrome::kChromeUISettingsHost) &&
base::StartsWith(
url->path(),
chrome::GetSettingsUrl(chrome::kPasswordManagerSubPage).path())) {
*url = GURL(chrome::kChromeUIPasswordManagerURL);
}
}
#endif
return true;
}
@ -6886,12 +6969,6 @@ void ChromeContentBrowserClient::OnNetworkServiceDataUseUpdate(
task_manager::TaskManagerInterface::UpdateAccumulatedStatsNetworkForRoute(
render_frame_host_id, recv_bytes, sent_bytes);
#endif
if (!base::FeatureList::IsEnabled(
network::features::kLessChattyNetworkService)) {
ChromeDataUseMeasurement::GetInstance().ReportNetworkServiceDataUse(
network_traffic_annotation_id_hash, recv_bytes, sent_bytes);
}
}
base::FilePath
@ -7168,18 +7245,35 @@ void ChromeContentBrowserClient::BlockBluetoothScanning(
ContentSettingsType::BLUETOOTH_SCANNING, CONTENT_SETTING_BLOCK);
}
bool ChromeContentBrowserClient::ArePersistentMediaDeviceIDsAllowed(
content::BrowserContext* browser_context,
const GURL& url,
void ChromeContentBrowserClient::GetMediaDeviceIDSalt(
content::RenderFrameHost* rfh,
const net::SiteForCookies& site_for_cookies,
const absl::optional<url::Origin>& top_frame_origin) {
const blink::StorageKey& storage_key,
base::OnceCallback<void(bool, const std::string&)> callback) {
GURL url = rfh->GetLastCommittedURL();
url::Origin top_frame_origin = rfh->GetMainFrame()->GetLastCommittedOrigin();
content::BrowserContext* browser_context = rfh->GetBrowserContext();
// Persistent MediaDevice IDs are allowed if cookies are allowed.
scoped_refptr<content_settings::CookieSettings> cookie_settings =
CookieSettingsFactory::GetForProfile(
Profile::FromBrowserContext(browser_context));
return cookie_settings->IsFullCookieAccessAllowed(
bool allowed = cookie_settings->IsFullCookieAccessAllowed(
url, site_for_cookies, top_frame_origin,
cookie_settings->SettingOverridesForStorage());
ChromeBrowsingDataModelDelegate::BrowsingDataAccessed(
rfh, storage_key,
ChromeBrowsingDataModelDelegate::StorageType::kMediaDeviceSalt, !allowed);
media_device_salt::MediaDeviceSaltService* salt_service =
MediaDeviceSaltServiceFactory::GetInstance()->GetForBrowserContext(
browser_context);
if (!salt_service) {
std::move(callback).Run(allowed, browser_context->UniqueId());
return;
}
salt_service->GetSalt(rfh->GetStorageKey(),
base::BindOnce(std::move(callback), allowed));
}
#if !BUILDFLAG(IS_ANDROID)
@ -7348,15 +7442,15 @@ bool ChromeContentBrowserClient::
#endif
}
bool ChromeContentBrowserClient::ShouldAllowInsecureLocalNetworkRequests(
bool ChromeContentBrowserClient::ShouldAllowInsecurePrivateNetworkRequests(
content::BrowserContext* browser_context,
const url::Origin& origin) {
// The host content settings map might no be null for some irregular profiles,
// e.g. the System Profile.
if (HostContentSettingsMap* service =
HostContentSettingsMapFactory::GetForProfile(browser_context)) {
return content_settings::ShouldAllowInsecureLocalNetworkRequests(service,
origin);
return content_settings::ShouldAllowInsecurePrivateNetworkRequests(service,
origin);
}
return false;
@ -7491,8 +7585,9 @@ bool ChromeContentBrowserClient::HasErrorPage(int http_status_code) {
}
std::unique_ptr<content::IdentityRequestDialogController>
ChromeContentBrowserClient::CreateIdentityRequestDialogController() {
return std::make_unique<IdentityDialogController>();
ChromeContentBrowserClient::CreateIdentityRequestDialogController(
content::WebContents* web_contents) {
return std::make_unique<IdentityDialogController>(web_contents);
}
bool ChromeContentBrowserClient::SuppressDifferentOriginSubframeJSDialogs(
@ -7535,6 +7630,11 @@ ChromeContentBrowserClient::CreatePrefetchServiceDelegate(
return std::make_unique<ChromePrefetchServiceDelegate>(browser_context);
}
std::unique_ptr<content::PrerenderWebContentsDelegate>
ChromeContentBrowserClient::CreatePrerenderWebContentsDelegate() {
return std::make_unique<PrerenderWebContentsDelegateImpl>();
}
void ChromeContentBrowserClient::OnWebContentsCreated(
content::WebContents* web_contents) {
// NOTE: Please don't add additional code to this method - attaching universal
@ -7586,11 +7686,7 @@ bool ChromeContentBrowserClient::ShouldPreconnectNavigation(
if (!web_request_api || web_request_api->MayHaveProxies())
return false;
#endif
// Preloading is sometimes disabled globally in Chrome via Finch to monitor
// its impact. However, we do not want to evaluate the impact of preconnecting
// at the start of navigation as part of the preloading holdback, so ignore
// the Finch setting here.
return prefetch::IsSomePreloadingEnabledIgnoringFinch(
return prefetch::IsSomePreloadingEnabled(
*Profile::FromBrowserContext(browser_context)->GetPrefs()) ==
content::PreloadingEligibility::kEligible;
}
@ -7623,7 +7719,8 @@ ChromeContentBrowserClient::GetAlternativeErrorPageOverrideInfo(
content::BrowserContext* browser_context,
int32_t error_code) {
#if !BUILDFLAG(IS_ANDROID)
if (base::FeatureList::IsEnabled(features::kIsolatedWebApps) &&
if (content::IsolatedWebAppsPolicy::AreIsolatedWebAppsEnabled(
browser_context) &&
url.SchemeIs(chrome::kIsolatedAppScheme)) {
content::mojom::AlternativeErrorPageOverrideInfoPtr
alternative_error_page_override_info =
@ -7737,17 +7834,28 @@ bool ChromeContentBrowserClient::IsFileSystemURLNavigationAllowed(
bool ChromeContentBrowserClient::AreIsolatedWebAppsEnabled(
content::BrowserContext* browser_context) {
#if !BUILDFLAG(IS_ANDROID)
Profile* profile = Profile::FromBrowserContext(browser_context);
if (!web_app::AreWebAppsEnabled(profile)) {
return false;
}
#if BUILDFLAG(IS_CHROMEOS)
// Check if the enterprise policy that regulates Isolated Web Apps force
// installing is present. If it is there then the IWAs should be enabled.
Profile* profile = Profile::FromBrowserContext(browser_context);
const base::Value::List& isolated_web_apps =
profile->GetPrefs()->GetList(prefs::kIsolatedWebAppInstallForceList);
if (!isolated_web_apps.empty()) {
return true;
}
#endif
return base::FeatureList::IsEnabled(features::kIsolatedWebApps);
#endif // BUILDFLAG(IS_CHROMEOS)
if (base::FeatureList::IsEnabled(features::kIsolatedWebApps)) {
return true;
}
#endif // !BUILDFLAG(IS_ANDROID)
return false;
}
bool ChromeContentBrowserClient::IsThirdPartyStoragePartitioningAllowed(
@ -7844,3 +7952,16 @@ bool ChromeContentBrowserClient::CanBackForwardCachedPageReceiveCookieChanges(
return cookie_settings->IsFullCookieAccessAllowed(
url, site_for_cookies, top_frame_origin, overrides);
}
void ChromeContentBrowserClient::GetCloudIdentifiers(
const storage::FileSystemURL& url,
content::FileSystemAccessPermissionContext::HandleType handle_type,
GetCloudIdentifiersCallback callback) {
#if BUILDFLAG(IS_CHROMEOS)
cloud_identifier::GetCloudIdentifierFromAsh(url, handle_type,
std::move(callback));
#else // BUILDFLAG(IS_CHROMEOS)
return ContentBrowserClient::GetCloudIdentifiers(url, handle_type,
std::move(callback));
#endif // BUILDFLAG(IS_CHROMEOS)
}

View File

@ -31,6 +31,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h"
#include "chrome/browser/chained_back_navigation_tracker.h"
#include "chrome/browser/content_settings/cookie_settings_factory.h"
#include "chrome/browser/devtools/devtools_window.h"
#include "chrome/browser/dom_distiller/tab_utils.h"
#include "chrome/browser/download/download_prefs.h"
@ -111,6 +112,10 @@
#include "components/bookmarks/browser/bookmark_utils.h"
#include "components/bookmarks/common/bookmark_pref_names.h"
#include "components/browsing_data/content/browsing_data_helper.h"
#include "components/content_settings/browser/page_specific_content_settings.h"
#include "components/content_settings/core/browser/cookie_settings.h"
#include "components/content_settings/core/common/content_settings.h"
#include "components/content_settings/core/common/cookie_settings_base.h"
#include "components/dom_distiller/core/url_utils.h"
#include "components/embedder_support/user_agent_utils.h"
#include "components/favicon/content/content_favicon_driver.h"
@ -134,6 +139,7 @@
#include "components/tab_groups/tab_group_visual_data.h"
#include "components/translate/core/browser/language_state.h"
#include "components/translate/core/browser/translate_manager.h"
#include "components/translate/core/common/translate_constants.h"
#include "components/user_education/common/feature_promo_controller.h"
#include "components/web_modal/web_contents_modal_dialog_manager.h"
#include "components/zoom/page_zoom.h"
@ -146,13 +152,18 @@
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/url_constants.h"
#include "content/public/common/url_utils.h"
#include "content/public/common/user_agent.h"
#include "extensions/buildflags/buildflags.h"
#include "net/cookies/cookie_util.h"
#include "printing/buildflags/buildflags.h"
#include "rlz/buildflags/buildflags.h"
#include "services/metrics/public/cpp/ukm_builders.h"
#include "services/metrics/public/cpp/ukm_recorder.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
#include "ui/base/clipboard/clipboard_buffer.h"
#include "ui/base/clipboard/scoped_clipboard_writer.h"
#include "ui/base/models/list_selection_model.h"
@ -185,6 +196,11 @@
#include "components/rlz/rlz_tracker.h" // nogncheck
#endif
#if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
#include "chrome/browser/accessibility/ax_screen_ai_annotator.h"
#include "chrome/browser/accessibility/ax_screen_ai_annotator_factory.h"
#endif
#if BUILDFLAG(IS_CHROMEOS_LACROS)
#include "chromeos/crosapi/mojom/task_manager.mojom.h"
#include "chromeos/lacros/lacros_service.h"
@ -364,6 +380,39 @@ WebContents* GetTabAndRevertIfNecessary(Browser* browser,
return GetTabAndRevertIfNecessaryHelper(browser, disposition, activate_tab);
}
void RecordReloadWithCookieBlocking(const Browser* browser,
WebContents* web_contents) {
// Figure out if 3P cookies are blocked for this page.
scoped_refptr<const content_settings::CookieSettings> cookie_settings =
CookieSettingsFactory::GetForProfile(browser->profile());
// For this metric, we define "cookies blocked in settings" based on the
// global opt-in to third-party cookie blocking as well as no overriding
// content setting on the top-level site.
bool cookies_blocked_in_settings =
cookie_settings->ShouldBlockThirdPartyCookies() &&
!cookie_settings->IsThirdPartyAccessAllowed(
web_contents->GetLastCommittedURL(), nullptr);
// Also measure if 3P cookies were actually blocked on the site.
content_settings::PageSpecificContentSettings* pscs =
content_settings::PageSpecificContentSettings::GetForFrame(
web_contents->GetPrimaryMainFrame());
bool cookies_blocked =
pscs && (pscs->blocked_local_shared_objects().GetObjectCount() > 0 ||
pscs->blocked_browsing_data_model()->size() > 0U);
ukm::SourceId source_id =
web_contents->GetPrimaryMainFrame()->GetPageUkmSourceId();
ukm::builders::ThirdPartyCookies_BreakageIndicator(source_id)
.SetBreakageIndicatorType(static_cast<int>(
net::cookie_util::BreakageIndicatorType::USER_RELOAD))
.SetTPCBlocked(cookies_blocked)
.SetTPCBlockedInSettings(cookies_blocked_in_settings)
.Record(ukm::UkmRecorder::Get());
}
void ReloadInternal(Browser* browser,
WindowOpenDisposition disposition,
bool bypass_cache) {
@ -384,6 +433,9 @@ void ReloadInternal(Browser* browser,
new_tab->Focus();
}
// User reloads is a possible breakage indicator from blocking 3P cookies.
RecordReloadWithCookieBlocking(browser, selected_tab);
DevToolsWindow* devtools =
DevToolsWindow::GetInstanceForInspectedWebContents(new_tab);
constexpr content::ReloadType kBypassingType =
@ -1432,6 +1484,12 @@ void ShowTranslateBubble(Browser* browser) {
chrome_translate_client->GetTranslateLanguages(web_contents, &source_language,
&target_language);
// If the source language matches the target language, we change the source
// language to unknown, so that we display "Detected Language".
if (source_language == target_language) {
source_language = translate::kUnknownLanguageCode;
}
translate::TranslateStep step = translate::TRANSLATE_STEP_BEFORE_TRANSLATE;
auto* language_state =
chrome_translate_client->GetTranslateManager()->GetLanguageState();
@ -1832,7 +1890,7 @@ void ToggleRequestTabletSite(Browser* browser) {
entry->SetIsOverridingUserAgent(false);
else
SetAndroidOsForTabletSite(current_tab);
controller.Reload(content::ReloadType::ORIGINAL_REQUEST_URL, true);
controller.LoadOriginalRequestURL();
}
void SetAndroidOsForTabletSite(content::WebContents* current_tab) {
@ -1847,6 +1905,8 @@ void SetAndroidOsForTabletSite(content::WebContents* current_tab) {
ua_override.ua_metadata_override = embedder_support::GetUserAgentMetadata(
g_browser_process->local_state());
ua_override.ua_metadata_override->mobile = true;
ua_override.ua_metadata_override->form_factor =
embedder_support::kMobileFormFactor;
ua_override.ua_metadata_override->platform =
kChPlatformOverrideForTabletSite;
ua_override.ua_metadata_override->platform_version = std::string();
@ -2044,8 +2104,16 @@ void UnfollowSite(content::WebContents* web_contents) {
}
#if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)
void RunScreenAIVisualAnnotation(Browser* browser) {
browser->RunScreenAIAnnotator();
void RunScreenAILayoutExtraction(Browser* browser) {
content::WebContents* web_contents =
browser->tab_strip_model()->GetActiveWebContents();
if (!web_contents) {
return;
}
screen_ai::AXScreenAIAnnotatorFactory::GetForBrowserContext(
browser->profile())
->AnnotateScreenshot(web_contents);
}
#endif // BUILDFLAG(ENABLE_SCREEN_AI_SERVICE)

View File

@ -548,9 +548,9 @@ void AddUninstallShortcutWorkItems(const InstallParams& install_params,
KEY_WOW64_32KEY, L"InstallLocation",
install_path.value(), true);
std::wstring chrome_icon =
ShellUtil::FormatIconLocation(install_path.Append(kChromeExe),
install_static::GetIconResourceIndex());
std::wstring chrome_icon = ShellUtil::FormatIconLocation(
install_path.Append(kChromeExe),
install_static::GetAppIconResourceIndex());
install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg,
KEY_WOW64_32KEY, L"DisplayIcon",
chrome_icon, true);

View File

@ -285,8 +285,9 @@
<message name="IDS_QUICK_ANSWERS_VIEW_A11Y_INFO_DESC_TEMPLATE_V2" desc="A11y description template for the Quick Answers view (V2 version).">
<ph name="QUERY_TEXT">$1<ex>interested</ex></ph>; <ph name="RESULT_TEXT">$2<ex>showing curiosity or concern about something or someone; having a feeling of interest.</ex></ph>; Press Search plus Space to see result in Google Search.
</message>
<!-- TODO(b/259440976): Remove navigation directions once the QA Rich Card feature launches. -->
<message name="IDS_QUICK_ANSWERS_VIEW_A11Y_NAME_TEXT" desc="A11y name text for the Quick Answers view.">
Info related to your selection
Info related to your selection. Use Left or Right arrow keys to access controls.
</message>
<message name="IDS_QUICK_ANSWERS_VIEW_A11Y_RETRY_LABEL_DESC" desc="A11y retry label description for the Quick Answers view.">
Cannot connect to the internet. Click to try again.
@ -313,22 +314,22 @@
</message>
<!-- Multitask Menu -->
<message name="IDS_MULTITASK_MENU_HALF_BUTTON_NAME" desc="Title of the half button on the multitask menu.">
<message name="IDS_MULTITASK_MENU_HALF_BUTTON_NAME" desc="Title of the half button on the multitask menu." meaning="Splits the associated window into half snapped state.">
Split
</message>
<message name="IDS_MULTITASK_MENU_PARTIAL_BUTTON_NAME" desc="Title and and accessible name of the partial button on the multitask menu.">
<message name="IDS_MULTITASK_MENU_PARTIAL_BUTTON_NAME" desc="Title and and accessible name of the partial button on the multitask menu." meaning="Splits the associated window into half snapped state.">
Partial
</message>
<message name="IDS_MULTITASK_MENU_FULLSCREEN_BUTTON_NAME" desc="Title and and accessible name of the fullscreen button on the multitask menu, when the window is not in fullscreen state.">
<message name="IDS_MULTITASK_MENU_FULLSCREEN_BUTTON_NAME" desc="Title and and accessible name of the fullscreen button on the multitask menu, when the window is not in fullscreen state." meaning="Puts the associated window into fullscreen state.">
Full
</message>
<message name="IDS_MULTITASK_MENU_EXIT_FULLSCREEN_BUTTON_NAME" desc="Title and and accessible name of the fullscreen button on the multitask menu, when the window is in fullscreen state.">
<message name="IDS_MULTITASK_MENU_EXIT_FULLSCREEN_BUTTON_NAME" desc="Title and and accessible name of the fullscreen button on the multitask menu, when the window is in fullscreen state." meaning="Restores the associated fullscreen window into its pre-fullscreen state.">
Exit full
</message>
<message name="IDS_MULTITASK_MENU_FLOAT_BUTTON_NAME" desc="Title and and accessible name of the float button on the multitask menu, when the window is not in float state.">
<message name="IDS_MULTITASK_MENU_FLOAT_BUTTON_NAME" desc="Title and and accessible name of the float button on the multitask menu, when the window is not in float state." meaning="Floats the associated window above other windows.">
Float
</message>
<message name="IDS_MULTITASK_MENU_EXIT_FLOAT_BUTTON_NAME" desc="Title and and accessible name of the float button on the multitask menu, when the window is in float state.">
<message name="IDS_MULTITASK_MENU_EXIT_FLOAT_BUTTON_NAME" desc="Title and and accessible name of the float button on the multitask menu, when the window is in float state." meaning="Restores the associated floated window to regular z-order.">
Exit float
</message>
<message name="IDS_MULTITASK_MENU_HALF_BUTTON_ACCESSIBLE_NAME" desc="A11y name for the half button on the multitask menu.">
@ -340,16 +341,16 @@
<message name="IDS_MULTITASK_MENU_PARTIAL_BUTTON_SMALL_ACCESSIBLE_NAME" desc="A11y name for the partial button's small side on the multitask menu.">
Dock window on the <ph name="DIRECTION">$1<ex>left</ex></ph> smaller portion of the screen
</message>
<message name="IDS_MULTITASK_MENU_LEFT" desc="A11y name and tooltip to describe left side of the screen.">
<message name="IDS_MULTITASK_MENU_LEFT" desc="A11y name and tooltip to describe left side of the screen." meaning="The associated window will snap to the left side of the screen.">
left
</message>
<message name="IDS_MULTITASK_MENU_RIGHT" desc="A11y name and tooltip to describe right side of the screen.">
<message name="IDS_MULTITASK_MENU_RIGHT" desc="A11y name and tooltip to describe right side of the screen." meaning="The associated window will snap to the right side of the screen.">
right
</message>
<message name="IDS_MULTITASK_MENU_TOP" desc="A11y name and tooltip to describe top side of the screen.">
<message name="IDS_MULTITASK_MENU_TOP" desc="A11y name and tooltip to describe top side of the screen." meaning="The associated window will snap to the top side of the screen.">
top
</message>
<message name="IDS_MULTITASK_MENU_BOTTOM" desc="A11y name and tooltip to describe bottom side of the screen.">
<message name="IDS_MULTITASK_MENU_BOTTOM" desc="A11y name and tooltip to describe bottom side of the screen." meaning="The associated window will snap to the bottom side of the screen.">
bottom
</message>
<message name="IDS_MULTITASK_MENU_NUDGE_TEXT" desc="Text that is shown when the clamshell multitask menu nudge is displayed.">
@ -443,6 +444,12 @@
<message name="IDS_ASH_ENTERPRISE_ENROLLMENT_BUTTON" desc="Text shown on enterprise enrollment button on oobe screen.">
Enterprise enrollment
</message>
<message name="IDS_ASH_DEVICE_ENROLLMENT_BUTTON" desc="New text shown on enterprise enrollment button on oobe screen on the shelf button.">
Device enrollment
</message>
<message name="IDS_ASH_SCHOOL_ENROLLMENT_BUTTON" desc="Text shown on school enrollment button on oobe screen child setup on the shelf button.">
School enrollment
</message>
<message name="IDS_ASH_SHELF_SIGNIN_BUTTON" desc="Text shown on sign in button on enrollment screen.">
Use as a personal device
</message>
@ -702,20 +709,13 @@
<message name="IDS_PRINT_MANAGEMENT_COLLAPSE_PRINTING_STATUS" desc="A text that indicates to the user that the print job is currently printing. This text only appears if the width of the app's window is small and cannot display the entire ongoing printing status.">
Printing
</message>
<!-- TODO(b/287470757): Remove translateable false once empty state strings finalized. -->
<message translateable="false" name="IDS_PRINT_MANAGEMENT_EMPTY_STATE_NO_JOBS_MESSAGE" desc="The message shown to users if they do not have any print jobs in progress i.e. being printed.">
No printer jobs
<message name="IDS_PRINT_MANAGEMENT_EMPTY_STATE_NO_JOBS_MESSAGE" desc="The message shown to users if they do not have any print jobs in progress i.e. being printed.">
No print jobs
</message>
<!-- TODO(b/287470757): Remove translateable false once empty state strings finalized. -->
<message translateable="false" name="IDS_PRINT_MANAGEMENT_EMPTY_STATE_PRINTER_SETTINGS_MESSAGE" desc="The message shown to users to suggest navigating to Printer settings when they do not have any print jobs.">
Go to Printer settings to manage your printers
<message name="IDS_PRINT_MANAGEMENT_EMPTY_STATE_PRINTER_SETTINGS_MESSAGE" desc="The message shown to users to suggest navigating to Printer settings when they do not have any print jobs.">
Manage your printers in printer settings
</message>
<!-- TODO(b/287470757): Remove translateable false once empty state strings finalized. -->
<message translateable="false" name="IDS_PRINT_MANAGEMENT_EMPTY_STATE_MANAGE_PRINTERS_LABEL" desc="The label for the button that opens Printer settings when they do not have any print jobs.">
Manage printers
</message>
<!-- TODO(b/287470757): Remove translateable false once finalized strings are available .-->
<message translateable="false" name="IDS_PRINT_MANAGEMENT_HEADER_MANAGE_PRINTERS_LABEL" desc="The label for the button that opens Printer settings when UI displays at least one print job.">
<message name="IDS_PRINT_MANAGEMENT_EMPTY_STATE_MANAGE_PRINTERS_LABEL" desc="The label for the button that opens Printer settings.">
Manage printers
</message>
@ -2486,6 +2486,21 @@
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_OFF" desc="Label for the toggle row in ambient mode settings page when it is disabled.">
Off
</message>
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_DURATION_TITLE" desc="Label for the drop down menu of ambient mode duration settings.">
Show screen saver
</message>
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_DURATION_MINUTES" desc="Label for the screen saver duration option in minutes.">
for <ph name="MINUTES">$1<ex>10</ex></ph> minutes
</message>
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_DURATION_ONE_HOUR" desc="Label for the screen saver duration option 1 hour.">
for 1 hour
</message>
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_DURATION_FOREVER" desc="Label for the screen saver duration option forever.">
forever
</message>
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_DURATION_DESCRIPTION" desc="Label for the screen saver duration description.">
To conserve battery, screen saver works only while charging.
</message>
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_TOPIC_SOURCE_TITLE" desc="Label for the radio button group of ambient mode topic source, where the screen contents come from.">
Image source
</message>
@ -2502,13 +2517,13 @@
Art gallery
</message>
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_TOPIC_SOURCE_ART_GALLERY_DESCRIPTION" desc="Description for the radio button to choose the topic source from art gallery. The radio button allows the user to set Art gallery for ambient mode, which shows photos to the user when their device is idle.">
Select curated artwork and images
Choose curated artwork and images
</message>
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_TOPIC_SOURCE_VIDEO" desc="Label for the radio button to choose the video topic source. The radio button allows the user to set which video ti play for ambient mode.">
Dawn to dark
</message>
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_TOPIC_SOURCE_VIDEO_DESCRIPTION" desc="Description for the radio button to choose the topic source from video animation. The radio button allows the user to set which video to play for ambient mode.">
Select <ph name="PRODUCT_NAME">$1<ex>Thoriumbook</ex></ph> exclusive artwork
Choose <ph name="PRODUCT_NAME">$1<ex>Thoriumbook</ex></ph> exclusive artwork
</message>
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_TOPIC_SOURCE_SELECTED_ROW" desc="A11y label for the selected topic source row in ambient mode.">
<ph name="TOPIC_SOURCE">$1<ex>Google Photos</ex></ph> <ph name="TOPIC_SOURCE_DESC">$2<ex>Select your memories</ex></ph> selected, press Enter to select <ph name="TOPIC_SOURCE">$1<ex>Google Photos</ex></ph> albums
@ -2568,7 +2583,7 @@
Float on by
</message>
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_ANIMATION_VIDEO_LABEL" desc="Label for the ambient mode float on by animation.">
Dawn to dark
Dawn to dark - exclusive
</message>
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_ZERO_STATE_MESSAGE" desc="Message shown in the Ambient subpage in the personalization hub when ambient mode is disabled.">
Turn on the toggle to select the screen saver options
@ -2689,18 +2704,6 @@
</message>
<!-- Personalization App Time of Day strings -->
<message name="IDS_PERSONALIZATION_APP_TIME_OF_DAY_WALLPAPER_DIALOG_TITLE" desc="Title for the dialog confirming user's selection of a Time of Day wallpaper.">
Confirm preset
</message>
<message name="IDS_PERSONALIZATION_APP_TIME_OF_DAY_WALLPAPER_DIALOG_CONTENT" desc="Content for the dialog confirming user's selection of a Time of Day wallpaper.">
Selecting this wallpaper will turn on auto dark mode and wallpaper color matching.
</message>
<message name="IDS_PERSONALIZATION_APP_TIME_OF_DAY_WALLPAPER_DIALOG_BACK_BUTTON" desc="Label for the button to close the dialog confirming user's selection of a Time of Day wallpaper.">
Back
</message>
<message name="IDS_PERSONALIZATION_APP_TIME_OF_DAY_WALLPAPER_DIALOG_CONFIRM_BUTTON" desc="Label for the button to accept the dialog confirming user's selection of a Time of Day wallpaper.">
Confirm
</message>
<message name="IDS_PERSONALIZATION_APP_TIME_OF_DAY_VIDEO_CLOUDS_ALBUM_TITLE" desc="Title for the clouds video in the ambient section of the hub.">
Cloud Flow
</message>
@ -2719,6 +2722,9 @@
<message name="IDS_PERSONALIZATION_APP_TIME_OF_DAY_BANNER_DESCRIPTION_NO_SCREENSAVER" desc="Description shown in the Time of Day promo banner without screen saver link.">
You now have access to new <ph name="BEGIN_LINK_WALLPAPER_SUBPAGE">&lt;a href="chrome://personalization/wallpaper/collection?id=_time_of_day_chromebook_collection"&gt;</ph>wallpapers<ph name="END_LINK_WALLPAPER_SUBPAGE">&lt;/a&gt;</ph>
</message>
<message name="IDS_PERSONALIZATION_APP_TIME_OF_DAY_WALLPAPER_COLLECTION_SUBLABEL" desc="Sublabel for the Time of Day wallpaper collection.">
Exclusive
</message>
<!-- Personalization App Search Results -->
<message name="IDS_PERSONALIZATION_APP_SEARCH_RESULT_TITLE" desc="Text for search result item which, when clicked, navigates the user to personalization app.">
@ -3571,6 +3577,33 @@
<message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_DRAM_PART_NUMBER_LABEL" translateable="false" desc="The label for the text input showing the device's dram part number.">
DRAM part number
</message>
<message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_DEVICE_NOT_COMPLIANT" translateable="false" desc="The text stating that the current device is not compliant.">
This device is not compliant.
</message>
<message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_DEVICE_COMPLIANT" translateable="false" desc="The text stating that the current device is compliant.">
This device is compliant.
</message>
<message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_DEVICE_COMPLIANCE_WARNING" translateable="false" desc="The text informing the user to replace the device's mainboard if the compliance information is incorrect.">
If this isn't correct, replace the mainboard.
</message>
<message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_DEVICE_QUESTION_IS_BRANDED" translateable="false" desc="The text asking if the device chassis is branded.">
Is the chassis branded?
</message>
<message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_DEVICE_QUESTION_DOES_MEET_REQUIREMENTS" translateable="false" desc="The text asking if the device's components meet compliance requirements.">
Do the device components meet requirements?
</message>
<message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_DEVICE_QUESTION_DOES_MEET_REQUIREMENTS_TOOLTIP" translateable="false" desc="The tooltip next to the question asking if the device's components meet compliance requirements.">
Refer to training guidance.
</message>
<message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_ANSWER_DEFAULT" translateable="false" desc="The option text showing the default value for yes/no questions.">
Select
</message>
<message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_ANSWER_NO" translateable="false" desc="The option text answering 'no' for yes/no questions.">
No
</message>
<message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_ANSWER_YES" translateable="false" desc="The option text answering 'yes' for yes/no questions.">
Yes
</message>
<!-- RO firmware reimaging page -->
<message name="IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_INSTALL_IMAGE_TITLE" translateable="false" desc="The title for the page when the device firmware is expected to be installed.">
Install firmware image
@ -3870,6 +3903,12 @@
<message name="IDS_FEEDBACK_TOOL_BLUETOOTH_LOGS_MESSAGE" translateable="false" desc="Message shown after user clicks on the bluetooth logs hyperlink">
Include bluetooth logs which captures information such as btsnoop and HCI logs from your current session. The logs will be filtered to remove as much personal identifiable information as possible.&#10;&#10;The information is stored for up to 90 days and access is restricted to the team working on this issue.
</message>
<message name="IDS_FEEDBACK_TOOL_LINK_CROSS_DEVICE_DOGFOOD_FEEDBACK_INFO" translateable="false" desc="Checkbox for Google internal account to submit a Cross Device Feedback Report.">
This is an issue between this Thoriumbook and another device. <ph name="BEGIN_LINK1">&lt;a id="linkCrossDeviceDogfoodFeedbackInfoLink"&gt;</ph>View more details<ph name="END_LINK1">&lt;/a&gt;</ph>.
</message>
<message name="IDS_FEEDBACK_TOOL_LINK_CROSS_DEVICE_DOGFOOD_FEEDBACK_MESSAGE" translateable="false" desc="Message shown after user clicks on the Cross Device Feedback hyperlink">
For cross-device issues related to features such as Phone Hub, Smart Lock, Instant Tethering, you may be prompted to file another feedback report from your phone.&#10;&#10;Access to this feedback report is restricted to the team working on this issue.
</message>
<message name="IDS_FEEDBACK_TOOL_ASSISTANT_LOGS_CHECKBOX" translateable="false" desc="Checkbox for Google internal account to attach assistant logs from the current session.">
Include recent Google Assistant history and information. <ph name="BEGIN_LINK1">&lt;a id="assistantLogsLink"&gt;</ph>View more details<ph name="END_LINK1">&lt;/a&gt;</ph>.
</message>
@ -3884,6 +3923,9 @@
<message name="IDS_FEEDBACK_TOOL_PRIVACY_NOTE" desc="Text for the privacy note included in the feedback app">
Go to the <ph name="BEGIN_LINK1">&lt;a id="legalHelpPageUrl"&gt;</ph>Legal Help page<ph name="END_LINK1">&lt;/a&gt;</ph> to request content changes for legal reasons. Some account and system information may be sent to Google. We will use the information you give us to help address technical issues and to improve our services, subject to our <ph name="BEGIN_LINK2">&lt;a id="privacyPolicyUrl"&gt;</ph>Privacy Policy<ph name="END_LINK2">&lt;/a&gt;</ph> and <ph name="BEGIN_LINK3">&lt;a id="termsOfServiceUrl"&gt;</ph>Terms of Service<ph name="END_LINK3">&lt;/a&gt;</ph>.
</message>
<message name="IDS_FEEDBACK_TOOL_MAY_BE_SHARED_NOTE" desc="Text to inform all users that their feedback may be shared">
We may share feedback submitted via this form with our partners to troubleshoot bugs and other issues that you report to us. Dont include sensitive information such as passwords.
</message>
<message name="IDS_FEEDBACK_TOOL_USER_EMAIL_LABEL" desc="Label showing the e-mail address that will be reported.">
Email
</message>
@ -3964,49 +4006,61 @@
<!-- Shortcut Customization -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_APP_TITLE" desc="Title of the app">
Keyboard Shortcuts
Key Shortcuts
</message>
<message name="IDS_SHORTCUT_CUSTOMIZATION_KEYBOARD_SETTINGS" desc="Label for link to open keyboard settings in the Settings app.">
Keyboard settings
</message>
<!-- TODO(b/286268215): Translate this string -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_ADD_SHORTCUT" desc="Button label to add a new shortcut for a specific action" translateable="false">
<message name="IDS_SHORTCUT_CUSTOMIZATION_ADD_SHORTCUT" desc="Button label to add a new shortcut for a specific action">
Add shortcut
</message>
<!-- TODO(b/286268215): Translate this string -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_RESTORE_DEFAULTS" desc="Button label to restore a specific action to its default shortcuts" translateable="false">
<message name="IDS_SHORTCUT_CUSTOMIZATION_RESTORE_DEFAULTS" desc="Button label to restore a specific action to its default shortcuts">
Restore defaults
</message>
<!-- TODO(b/286268215): Translate this string -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_EDIT_DIALOG_DONE" desc="Used to close edit shortcuts modal dialog" translateable="false">
<message name="IDS_SHORTCUT_CUSTOMIZATION_EDIT_DIALOG_DONE" desc="Used to close edit shortcuts modal dialog">
Done
</message>
<!-- TODO(b/286268215): Translate this string -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_CANCEL" desc="Used to cancel action in various modals" translateable="false">
<message name="IDS_SHORTCUT_CUSTOMIZATION_CANCEL" desc="Used to cancel action in various modals">
Cancel
</message>
<!-- TODO(b/286268215): Translate this string -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_EDIT_VIEW_STATUS_MESSAGE" desc="Instructions to user when they're inputting a new shortcut" translateable="false">
<message name="IDS_SHORTCUT_CUSTOMIZATION_EDIT_VIEW_STATUS_MESSAGE" desc="Instructions to user when they're inputting a new shortcut">
Press 1-4 modifiers and 1 other key on your keyboard
</message>
<message name="IDS_SHORTCUT_CUSTOMIZATION_RESTORE_DEFAULT_ERROR_MESSAGE" desc="Description text shown to users that their default shortcut is used by another shortcut action">
Shortcut is being used for "<ph name="CONFLICT_ACCEL_NAME">$1<ex>BRIGHTNESS_UP</ex></ph>". Edit or remove to resolve the conflict.
</message>
<message name="IDS_SHORTCUT_CUSTOMIZATION_RESET_ALL_SHORTCUTS" desc="Button label to reset all shortcuts in the app to their default values">
Reset all shortcuts
</message>
<!-- TODO(b/286268215): Translate this string -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_CONFIRM_RESET_ALL_SHORTCUTS_TITLE" desc="Title of the modal shown when user clicks button to reset all shortcuts" translateable="false">
<message name="IDS_SHORTCUT_CUSTOMIZATION_CONFIRM_RESET_ALL_SHORTCUTS_TITLE" desc="Title of the modal shown when user clicks button to reset all shortcuts">
Reset all shortcuts to defaults?
</message>
<!-- TODO(b/286268215): Translate this string -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_CONFIRM_RESET_SHORTCUTS_BUTTON" desc="Button label for action that confirms resetting all shortcuts to their default values" translateable="false">
<message name="IDS_SHORTCUT_CUSTOMIZATION_CONFIRM_RESET_SHORTCUTS_BUTTON" desc="Button label for action that confirms resetting all shortcuts to their default values">
Reset
</message>
<!-- TODO(b/286268215): Translate this string -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_LOCKED_SHORTCUT_STATUS_MESSAGE" desc="The status message that displays when user clicks button to override a locked accelerator" translateable="false">
Shortcut is used by <ph name="CONFLICT_ACCEL_NAME">$1<ex>BRIGHTNESS_UP</ex></ph>. Press a new shortcut to replace.
<message name="IDS_SHORTCUT_CUSTOMIZATION_LOCKED_SHORTCUT_STATUS_MESSAGE" desc="The status message that displays when user clicks button to override a locked accelerator">
Shortcut is being used for "<ph name="CONFLICT_ACCEL_NAME">$1<ex>BRIGHTNESS_UP</ex></ph>". Press a new shortcut.
</message>
<!-- TODO(b/286268215): Translate this string -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_SHORTCUT_WITH_CONFILICT_STATUS_MESSAGE" desc="The status message that displays when user clicks button to override an accelerator" translateable="false">
Shortcut is used by <ph name="CONFLICT_ACCEL_NAME">$1<ex>BRIGHTNESS_UP</ex></ph>. Press a new shortcut or press the same one again to use it for this action instead.
<message name="IDS_SHORTCUT_CUSTOMIZATION_SHORTCUT_WITH_CONFILICT_STATUS_MESSAGE" desc="The status message that displays when user clicks button to override an accelerator">
Shortcut is being used for "<ph name="CONFLICT_ACCEL_NAME">$1<ex>BRIGHTNESS_UP</ex></ph>". Press a new shortcut. To replace the original shortcut, press this shortcut again.
</message>
<message name="IDS_SHORTCUT_CUSTOMIZATION_MAX_ACCELERATORS_REACHED_HINT" desc="The hint message that displays when there are five accelerators in the dialog">
You can only customize 5 shortcuts. Delete a shortcut to add a new one.
</message>
<message name="IDS_SHORTCUT_CUSTOMIZATION_SHIFT_ONLY_NOT_ALLOWED_STATUS_MESSAGE"
desc="The status message that displays when user press a key combination
that use only 'shift' as modifier">
Shortcut not available. Press a new shortcut using shift and 1 more modifier key (ctrl, alt, search, or launcher).
</message>
<message name="IDS_SHORTCUT_CUSTOMIZATION_MISSING_MODIFIER_STATUS_MESSAGE"
desc="The status message that displays when user press a key combination
that does not include a modifier key.">
Shortcut not available. Press a new shortcut using a modifier key (ctrl, alt, shift, search, or launcher).
</message>
<message name="IDS_SHORTCUT_CUSTOMIZATION_KEY_NOT_ALLOWED_STATUS_MESSAGE"
desc="The status message that displays when user press a key combination
that includes a top row key but does not include the search key">
Shortcut with top row keys need to include the search key.
</message>
<message name="IDS_SHORTCUT_CUSTOMIZATION_SEARCH_NO_RESULTS" desc="Text description of a search that has no results.">
No search results found
@ -4023,8 +4077,7 @@
<message name="IDS_SHORTCUT_CUSTOMIZATION_SEARCH_RESULT_ROW_A11Y_RESULT_SELECTED" desc="ThoriumVox alert to indicate the position number of a selected result in a list of search results and the selected result text itself, and that the user can press enter to navigate to section described by the search result.">
Search result <ph name="LIST_POSITION">$1<ex>1</ex></ph> of <ph name="LIST_SIZE">$2<ex>2</ex></ph>: <ph name="SEARCH_RESULT_TEXT">$3<ex>Open new tab, ctrl T</ex></ph>. Press Enter to navigate to shortcut.
</message>
<!-- TODO(b/286268215): Translate this string -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_NO_SHORTCUT_ASSIGNED" desc="The text shown when no shortcut is enabled with the accelerator" translateable="false">
<message name="IDS_SHORTCUT_CUSTOMIZATION_NO_SHORTCUT_ASSIGNED" desc="The text shown when no shortcut is enabled with the accelerator">
No shortcut assigned
</message>
<message name="IDS_SHORTCUT_CUSTOMIZATION_CATEGORY_GENERAL" desc="Category named 'General' shown on the navigation sidebar">
@ -4145,8 +4198,8 @@
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_BROWSER_SEARCH" desc="The text read aloud by the screen reader describing the keyboard icon 'browser search'.">
browser search
</message>
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_TOGGLE_DICTATION" desc="The text read aloud by the screen reader describing the keyboard icon 'toggle dictation'.">
toggle dictation
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_ENABLE_OR_TOGGLE_DICTATION" desc="The text read aloud by the screen reader describing the keyboard icon 'toggle dictation'." is_accessibility_with_no_ui="true">
enable or toggle dictation
</message>
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_EMOJI_PICKER" desc="The text read aloud by the screen reader describing the keyboard icon 'emoji picker'.">
emoji picker
@ -4197,11 +4250,13 @@
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MODE_CHANGE" desc="The text read aloud by the screen reader describing the keyboard icon 'mode change'.">
mode change
</message>
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_OPEN_LAUNCHER" desc="The text read aloud by the screen reader describing the keyboard icon 'open launcher'.">
open launcher
<!-- TODO(b/286268215): Translate this string -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_OPEN_LAUNCHER" desc="The text read aloud by the screen reader describing the keyboard icon 'meta launcher'." translateable="false">
meta launcher
</message>
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_OPEN_SEARCH" desc="The text read aloud by the screen reader describing the keyboard icon 'open search'.">
open search
<!-- TODO(b/286268215): Translate this string -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_OPEN_SEARCH" desc="The text read aloud by the screen reader describing the keyboard icon 'meta search'." translateable="false">
meta search
</message>
<!-- TODO(b/286268215): Translate this string -->
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_POWER" desc="The text read aloud by the screen reader describing the keyboard icon 'power'." translateable="false">
@ -4252,6 +4307,9 @@
<message name="IDS_SETTINGS_APN_MENU_DETAILS" desc="Details button in three dotted menu for APNs">
Details
</message>
<message name="IDS_SETTINGS_APN_MENU_EDIT" desc="Edit button in three dotted menu for APNs">
Edit
</message>
<message name="IDS_SETTINGS_APN_MENU_DISABLE" desc="Disable button in three dotted menu for APNs">
Disable
</message>
@ -4261,6 +4319,18 @@
<message name="IDS_SETTINGS_APN_MENU_REMOVE" desc="Remove button in three dotted menu for APNs">
Remove
</message>
<message name="IDS_SETTINGS_APN_A11Y_NAME" desc="Accessibility text to display the name of an APN item in the APN list and what index it is in the list">
<ph name="INDEX">$1<ex>1</ex></ph> of <ph name="COUNT">$2<ex>5</ex></ph>, <ph name="NAME">$3<ex>ATT Broadband</ex></ph>.
</message>
<message name="IDS_SETTINGS_APN_A11Y_AUTO_DETECTED" desc="Accessibility text for when an APN is automatically detected">
APN is automatically detected.
</message>
<message name="IDS_SETTINGS_APN_A11Y_CONNECTED" desc="Accessibility text for when an APN is connected">
APN is connected.
</message>
<message name="IDS_SETTINGS_APN_A11Y_DISABLED" desc="Accessibility text for when an APN is disabled">
APN is disabled.
</message>
<message name="IDS_SETTINGS_APN_MORE_ACTIONS_TITLE" desc="Description of the tree dotted menu for APNs">
More actions for <ph name="APN_NAME">$1<ex>vzwinternet</ex></ph>
</message>
@ -4271,7 +4341,7 @@
APN details
</message>
<message name="IDS_SETTINGS_EDIT_APN_DIALOG_TITLE" desc="Title for the dialog for viewing an APN">
View and edit details
Edit APN details
</message>
<message name="IDS_SETTINGS_APN_INPUT_LABEL" desc="Label for the input field where the APN is specified, the asterisk indicates that this is required">
APN*
@ -4371,6 +4441,27 @@
</message>
<!-- End of Arc Input Overlay -->
</if>
<!-- Strings for WebAppSettings -->
<message name="IDS_RUN_ON_OS_LOGIN_ENABLED_MESSAGE" desc="This is the message of the notification when an application is automatically started on OS login.[ICU Syntax]">
{NUM_ROOL_APPS, plural, offset:2
=1 {Your administrator has set <ph name="APP_NAME_1">{APP_NAME_1}</ph> to start automatically every time you log in.}
=2 {Your administrator has set <ph name="APP_NAME_1">{APP_NAME_1}</ph> and <ph name="APP_NAME_2">{APP_NAME_2}</ph> to start automatically every time you log in.}
=3 {Your administrator has set <ph name="APP_NAME_1">{APP_NAME_1}</ph>, <ph name="APP_NAME_2">{APP_NAME_2}</ph> and <ph name="APP_NAME_3">{APP_NAME_3}</ph> to start automatically every time you log in.}
other {Your administrator has set <ph name="APP_NAME_1">{APP_NAME_1}</ph>, <ph name="APP_NAME_2">{APP_NAME_2}</ph> and # other apps to start automatically every time you log in.}
}
</message>
<message name="IDS_RUN_ON_OS_LOGIN_ENABLED_TITLE" desc="This is the title of the notification when an application is automatically started on OS login. [ICU Syntax]">
{NUM_ROOL_APPS, plural,
=1 {<ph name="APP_NAME_1">{APP_NAME_1}</ph> was started automatically}
other {# apps were started automatically}
}
</message>
<message name="IDS_RUN_ON_OS_LOGIN_ENABLED_LEARN_MORE" desc="This is the button-text of the notification when an application is automatically started on OS login.">
Learn more
</message>
</messages>
</release>
</grit>

View File

@ -106,12 +106,11 @@ test("components_unittests") {
}
if (is_fuchsia) {
# TODO(https://crbug.com/1185811): Investigate removing the requirement for
# job_policy_ambient_mark_vmo_exec for the sake of V8's allocator in tests.
test_runner_shard = "//build/config/fuchsia/test/elf_test_ambient_exec_runner.shard.test-cml"
additional_manifest_fragments = [
"//build/config/fuchsia/test/fonts.shard.test-cml",
# TODO(https://crbug.com/1185811): Investigate removing the requirement
# for VmexResource.
"//build/config/fuchsia/test/mark_vmo_executable.shard.test-cml",
"//build/config/fuchsia/test/network.shard.test-cml",
"//build/config/fuchsia/test/present_view.shard.test-cml",
@ -201,7 +200,9 @@ test("components_unittests") {
"//components/os_crypt/sync:unit_tests",
"//components/page_image_service:unit_tests",
"//components/password_manager/core/browser:unit_tests",
"//components/password_manager/core/common:unit_tests",
"//components/payments/core:unit_tests",
"//components/plus_addresses:unit_tests",
"//components/policy/core/browser:unit_tests",
"//components/policy/core/common:unit_tests",
"//components/power_bookmarks/core:unit_tests",
@ -219,6 +220,7 @@ test("components_unittests") {
"//components/reporting/metrics:unit_tests",
"//components/reporting/storage:unit_tests",
"//components/reporting/util:unit_tests",
"//components/safe_browsing/core/browser:safe_browsing_hats_delegate_unittest",
"//components/safe_browsing/core/browser:safe_browsing_metrics_collector_unittest",
"//components/safe_browsing/core/browser/hashprefix_realtime:unit_tests",
"//components/safe_browsing/core/browser/password_protection:unit_tests",
@ -371,7 +373,9 @@ test("components_unittests") {
"//components/javascript_dialogs:unit_tests",
"//components/js_injection/common:unit_tests",
"//components/keyed_service/content:unit_tests",
"//components/language/content/browser:unit_tests",
"//components/link_header_util:unit_tests",
"//components/media_device_salt:unit_tests",
"//components/mirroring:mirroring_tests",
"//components/navigation_interception:unit_tests",
"//components/no_state_prefetch/browser:unit_tests",
@ -385,6 +389,8 @@ test("components_unittests") {
"//components/paint_preview/common:unit_tests",
"//components/paint_preview/player:unit_tests",
"//components/paint_preview/renderer:unit_tests",
"//components/password_manager/content/browser:unit_tests",
"//components/password_manager/services/csv_password:unit_tests",
"//components/payments/content:unit_tests",
"//components/payments/content/utility:unit_tests",
"//components/policy/content:unit_tests",
@ -398,10 +404,12 @@ test("components_unittests") {
"//components/ukm/content:unit_tests",
"//components/url_rewrite:unit_tests",
"//components/user_education/common:unit_tests",
"//components/value_store:unit_tests",
"//components/visitedlink/test:unit_tests",
"//components/web_cache/browser:unit_tests",
"//components/webapps/services/web_app_origin_association:unit_tests",
"//components/webauthn/json:unit_tests",
"//components/webcrypto:unit_tests",
"//components/webrtc:unit_tests",
"//components/webrtc_logging:unit_tests",
"//components/webrtc_logging/browser:unit_tests",
@ -440,7 +448,7 @@ test("components_unittests") {
"//components/browsing_topics/common:unit_tests",
"//components/certificate_transparency:unit_tests",
"//components/content_settings/browser:unit_tests",
"//components/language/content/browser:unit_tests",
"//components/content_settings/browser/ui:unit_tests",
"//components/media_router/browser:unit_tests",
"//components/media_router/common:unit_tests",
"//components/media_router/common/providers/cast/channel:unit_tests",
@ -448,8 +456,6 @@ test("components_unittests") {
"//components/page_load_metrics/browser:unit_tests",
"//components/page_load_metrics/browser/observers/ad_metrics:unit_tests",
"//components/page_load_metrics/renderer:unit_tests",
"//components/password_manager/content/browser:unit_tests",
"//components/password_manager/services/csv_password:unit_tests",
"//components/performance_manager:unit_tests",
"//components/permissions:unit_tests",
"//components/permissions/prediction_service:unit_tests",
@ -478,11 +484,9 @@ test("components_unittests") {
"//components/subresource_filter/content/browser:unit_tests",
"//components/subresource_filter/content/common:unit_tests",
"//components/subresource_filter/content/renderer:unit_tests",
"//components/value_store:unit_tests",
"//components/web_package:unit_tests",
"//components/web_package/test_support:unit_tests",
"//components/webapps/browser:unit_tests",
"//components/webcrypto:unit_tests",
]
if (!is_win) { #!iOS and!Windows
@ -524,6 +528,7 @@ test("components_unittests") {
"//components/embedder_support/android:native_java_unittests_java",
"//components/embedder_support/android/metrics:test_support_java",
"//components/embedder_support/android/metrics:unit_tests",
"//components/environment_integrity/android:unit_tests",
"//components/gcm_driver/instance_id:test_support",
"//components/gcm_driver/instance_id/android:instance_id_driver_java",
"//components/gcm_driver/instance_id/android:instance_id_driver_test_support_java",
@ -577,7 +582,6 @@ test("components_unittests") {
# See comment in components / guest_view / browser / BUILD.gn for why
# guest_view is currently non - mobile.
"//components/guest_view/browser:unit_tests",
"//components/password_manager/services/password_strength:unit_tests",
"//components/soda:unit_tests",
"//components/storage_monitor:unit_tests",
"//components/web_modal:unit_tests",
@ -654,7 +658,10 @@ test("components_unittests") {
}
if (safe_browsing_mode != 0) {
deps += [ "//components/safe_browsing/content/common:unit_tests" ]
deps += [
"//components/safe_browsing/content/common:unit_tests",
"//components/safe_browsing/core/browser:safe_browsing_url_checker_unittest",
]
}
# TODO(crbug / 1056278): Enable this on Fuchsia and merge with the above
@ -675,7 +682,6 @@ test("components_unittests") {
"//components/safe_browsing/content/renderer:throttles_unittest",
"//components/safe_browsing/core/browser:ping_manager_unittest",
"//components/safe_browsing/core/browser:safe_browsing_lookup_mechanism_experimenter_unittest",
"//components/safe_browsing/core/browser:safe_browsing_url_checker_unittest",
"//components/safe_browsing/core/browser:user_population_unittest",
"//components/safe_browsing/core/browser:verdict_cache_manager_unittest",
"//components/safe_browsing/core/browser/db:unit_tests_local_db",
@ -951,6 +957,7 @@ if (use_blink) {
if (enable_screen_ai_service) {
deps += [
"//components/services/screen_ai",
"//components/services/screen_ai/public/mojom",
"//skia",
]
}
@ -1024,7 +1031,6 @@ if (use_blink) {
}
if (is_fuchsia) {
test_runner_shard = "//build/config/fuchsia/test/elf_test_ambient_exec_runner.shard.test-cml"
additional_manifest_fragments = [
"//build/config/fuchsia/test/present_view.shard.test-cml",
"//build/config/fuchsia/test/fonts.shard.test-cml",
@ -1109,6 +1115,7 @@ if (is_android) {
robolectric_binary("components_junit_tests") {
deps = [
"//components/android_autofill/browser/junit:components_autofill_junit_tests",
"//components/autofill/android:payments_autofill_junit_tests",
"//components/background_task_scheduler:components_background_task_scheduler_junit_tests",
"//components/browser_ui/bottomsheet/android/internal:junit_tests",
"//components/browser_ui/client_certificate/android:junit",
@ -1123,6 +1130,7 @@ if (is_android) {
"//components/crash/android:junit",
"//components/download/network:junit",
"//components/embedder_support/android:components_embedder_support_junit_tests",
"//components/environment_integrity/android:junit",
"//components/gcm_driver/android:components_gcm_driver_junit_tests",
"//components/image_fetcher:junit",
"//components/installedapp/android:junit",

View File

@ -484,6 +484,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
registry->RegisterBooleanPref(prefs::kEditBookmarksEnabled, true);
registry->RegisterBooleanPref(
// TODO: Alex313031 remove on M120
prefs::kShowAppsShortcutInBookmarkBar, true,
user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
registry->RegisterBooleanPref(

View File

@ -1,4 +1,4 @@
// Copyright 2022 The Chromium Authors and Alex313031. All rights reserved.
// Copyright 2023 The Chromium Authors and Alex313031
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

View File

@ -77,6 +77,7 @@ bool IsDefaultValue(const FeatureEntry& entry,
case FeatureEntry::SINGLE_VALUE:
case FeatureEntry::SINGLE_DISABLE_VALUE:
case FeatureEntry::ORIGIN_LIST_VALUE:
case FeatureEntry::STRING_VALUE:
return enabled_entries.count(entry.internal_name) == 0;
case FeatureEntry::MULTI_VALUE:
case FeatureEntry::ENABLE_DISABLE_VALUE:
@ -225,7 +226,40 @@ std::string GetCombinedOriginListValue(const FlagsStorage& flags_storage,
return CombineAndSanitizeOriginLists(existing_value, new_value);
}
std::string GetCombinedStringValue(const FlagsStorage& flags_storage,
const base::CommandLine& command_line,
const std::string& internal_entry_name,
const std::string& command_line_switch) {
const std::string existing_value =
command_line.GetSwitchValueASCII(command_line_switch);
const std::string new_value =
flags_storage.GetStringFlag(internal_entry_name);
if (new_value.empty()) {
return existing_value;
}
return new_value;
}
#if BUILDFLAG(IS_CHROMEOS_ASH)
// Removes the specified command line switch (if present).
void RemoveCommandLineSwitch(base::CommandLine* current_cl,
const std::string& switch_to_remove) {
base::CommandLine new_cl(current_cl->GetProgram());
const base::CommandLine::SwitchMap switches = current_cl->GetSwitches();
for (const auto& it : switches) {
const auto& switch_name = it.first;
const auto& switch_value = it.second;
if (switch_name != switch_to_remove) {
if (switch_value.empty()) {
new_cl.AppendSwitch(switch_name);
} else {
new_cl.AppendSwitchNative(switch_name, switch_value);
}
}
}
*current_cl = new_cl;
}
// ChromeOS does not call ConvertFlagsToSwitches on startup (see
// ChromeFeatureListCreator::ConvertFlagsToSwitches() for details) so the
// command line cannot be updated using pref values. Instead, this method
@ -237,26 +271,28 @@ void DidModifyOriginListFlag(const FlagsStorage& flags_storage,
flags_storage, *current_cl, entry.internal_name,
entry.switches.command_line_switch);
// Remove the switch if it exists.
base::CommandLine new_cl(current_cl->GetProgram());
const base::CommandLine::SwitchMap switches = current_cl->GetSwitches();
for (const auto& it : switches) {
const auto& switch_name = it.first;
const auto& switch_value = it.second;
if (switch_name != entry.switches.command_line_switch) {
if (switch_value.empty()) {
new_cl.AppendSwitch(switch_name);
} else {
new_cl.AppendSwitchNative(switch_name, switch_value);
}
}
}
*current_cl = new_cl;
RemoveCommandLineSwitch(current_cl, entry.switches.command_line_switch);
const std::string sanitized =
CombineAndSanitizeOriginLists(std::string(), new_value);
current_cl->AppendSwitchASCII(entry.switches.command_line_switch, sanitized);
}
// ChromeOS does not call ConvertFlagsToSwitches on startup (see
// ChromeFeatureListCreator::ConvertFlagsToSwitches() for details) so the
// command line cannot be updated using pref values. Instead, this method
// modifies it on the fly when the user makes a change.
void DidModifyStringFlag(const FlagsStorage& flags_storage,
const FeatureEntry& entry) {
base::CommandLine* current_cl = base::CommandLine::ForCurrentProcess();
const std::string new_value =
GetCombinedStringValue(flags_storage, *current_cl, entry.internal_name,
entry.switches.command_line_switch);
RemoveCommandLineSwitch(current_cl, entry.switches.command_line_switch);
current_cl->AppendSwitchASCII(entry.switches.command_line_switch, new_value);
}
#endif
} // namespace
@ -376,16 +412,23 @@ void FlagsState::SetFeatureEntryEnabled(FlagsStorage* flags_storage,
DCHECK(e);
if (e->type == FeatureEntry::SINGLE_VALUE ||
e->type == FeatureEntry::ORIGIN_LIST_VALUE) {
e->type == FeatureEntry::ORIGIN_LIST_VALUE ||
e->type == FeatureEntry::STRING_VALUE) {
if (enable)
needs_restart_ |= enabled_entries.insert(internal_name).second;
else
needs_restart_ |= (enabled_entries.erase(internal_name) > 0);
#if BUILDFLAG(IS_CHROMEOS_ASH)
// If an origin list was enabled or disabled, update the command line flag.
if (e->type == FeatureEntry::ORIGIN_LIST_VALUE && enable)
DidModifyOriginListFlag(*flags_storage, *e);
// If a string or origin list was enabled or disabled, update the command
// line flag.
if (enable) {
if (e->type == FeatureEntry::ORIGIN_LIST_VALUE) {
DidModifyOriginListFlag(*flags_storage, *e);
} else if (e->type == FeatureEntry::STRING_VALUE) {
DidModifyStringFlag(*flags_storage, *e);
}
}
#endif
} else if (e->type == FeatureEntry::SINGLE_DISABLE_VALUE) {
@ -434,6 +477,24 @@ void FlagsState::SetOriginListFlag(const std::string& internal_name,
#endif
}
void FlagsState::SetStringFlag(const std::string& internal_name,
const std::string& value,
FlagsStorage* flags_storage) {
flags_storage->SetStringFlag(internal_name, value);
#if BUILDFLAG(IS_CHROMEOS_ASH)
const FeatureEntry* entry = FindFeatureEntryByName(internal_name);
DCHECK(entry);
std::set<std::string> enabled_entries;
GetSanitizedEnabledFlags(flags_storage, &enabled_entries);
const bool enabled = base::Contains(enabled_entries, entry->internal_name);
if (enabled) {
DidModifyStringFlag(*flags_storage, *entry);
}
#endif
}
void FlagsState::RemoveFlagsSwitches(
base::CommandLine::SwitchMap* switch_list) {
for (const auto& entry : flags_switches_)
@ -627,6 +688,13 @@ void FlagsState::GetFlagFeatureEntries(
*flags_storage, *base::CommandLine::ForCurrentProcess(),
entry.internal_name, entry.switches.command_line_switch));
break;
case FeatureEntry::STRING_VALUE:
data.Set("enabled", !is_default_value);
data.Set("string_value",
GetCombinedStringValue(
*flags_storage, *base::CommandLine::ForCurrentProcess(),
entry.internal_name, entry.switches.command_line_switch));
break;
case FeatureEntry::MULTI_VALUE:
case FeatureEntry::ENABLE_DISABLE_VALUE:
case FeatureEntry::FEATURE_VALUE:
@ -889,6 +957,15 @@ void FlagsState::GenerateFlagsToSwitchesMapping(
name_to_switch_map);
break;
}
case FeatureEntry::STRING_VALUE: {
const std::string string_value = GetCombinedStringValue(
*flags_storage, command_line, entry.internal_name,
entry.switches.command_line_switch);
AddSwitchMapping(entry.internal_name,
entry.switches.command_line_switch, string_value,
name_to_switch_map);
break;
}
case FeatureEntry::MULTI_VALUE:
for (int j = 0; j < entry.NumOptions(); ++j) {

View File

@ -1,4 +1,5 @@
<!doctype html>
<!-- Copyright 2023 The Chromium Authors and Alex313031 -->
<!-- Note that chrome://flags is intentionally not a translated UI surface, -->
<!-- so don't mark it with direction or language attributes. -->
<html>

View File

@ -211,20 +211,21 @@ ui::ImageModel OmniboxView::GetIcon(int dip_size,
// styling support.
if (!AutocompleteMatch::IsStarterPackType(match.type)) {
// For site suggestions, display site's favicon.
favicon = model()->client()->GetFaviconForPageUrl(
favicon = controller_->client()->GetFaviconForPageUrl(
match.destination_url, std::move(on_icon_fetched));
}
}
if (!favicon.IsEmpty())
return ui::ImageModel::FromImage(model()->client()->GetSizedIcon(favicon));
return ui::ImageModel::FromImage(
controller_->client()->GetSizedIcon(favicon));
// If the client returns an empty favicon, fall through to provide the
// generic vector icon. |on_icon_fetched| may or may not be called later.
// If it's never called, the vector icon we provide below should remain.
// For bookmarked suggestions, display bookmark icon.
bookmarks::BookmarkModel* bookmark_model =
model()->client()->GetBookmarkModel();
controller_->client()->GetBookmarkModel();
const bool is_bookmarked =
bookmark_model && bookmark_model->IsBookmarked(match.destination_url);
@ -232,8 +233,7 @@ ui::ImageModel OmniboxView::GetIcon(int dip_size,
// icon.
const TemplateURL* turl =
match.associated_keyword
? model()
->client()
? controller_->client()
->GetTemplateURLService()
->GetTemplateURLForKeyword(match.associated_keyword->keyword)
: nullptr;
@ -355,7 +355,7 @@ OmniboxView::OmniboxView(std::unique_ptr<OmniboxClient> client)
std::move(client))) {}
const LocationBarModel* OmniboxView::GetLocationBarModel() const {
return model() ? model()->client()->GetLocationBarModel() : nullptr;
return controller_->client()->GetLocationBarModel();
}
OmniboxEditModel* OmniboxView::model() {
@ -367,6 +367,15 @@ const OmniboxEditModel* OmniboxView::model() const {
return controller_->edit_model();
}
OmniboxController* OmniboxView::controller() {
return const_cast<OmniboxController*>(
const_cast<const OmniboxView*>(this)->controller());
}
const OmniboxController* OmniboxView::controller() const {
return controller_.get();
}
void OmniboxView::TextChanged() {
EmphasizeURLComponents();
model()->OnChanged();

View File

@ -1,4 +1,4 @@
// Copyright 2022 The Chromium Authors and Alex313031. All rights reserved.
// Copyright 2023 The Chromium Authors and Alex313031
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

View File

@ -312,6 +312,10 @@
name: "AllowURNsInIframes",
base_feature: "none",
},
{
name: "AnchorHrefCheckInvalidURL",
status: "stable",
},
{
name: "AndroidDownloadableFontsMatching",
base_feature: "none",
@ -346,7 +350,6 @@
origin_trial_feature_name: "AttributionReportingCrossAppWeb",
origin_trial_allows_third_party: true,
base_feature: "none",
browser_process_read_access: true,
},
{
// This only exists so we can use RuntimeEnabled in the IDL file
@ -577,12 +580,23 @@
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
name: "CapturedMouseEvents",
"depends_on": ["CaptureController"],
status: {"Android": "", "default": "test"},
},
{
name: "CaptureHandle",
depends_on: ["GetDisplayMedia"],
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
// Kill switch for changes to RenderFrameMetadataObserverImpl in connection with Engagement
// Signals. See https://crrev.com/c/4544201 and https://crbug.com/1458640.
name: "CCTNewRFMPushBehavior",
base_feature_status: "enabled",
},
{
name: "checkVisibility",
status: "stable",
@ -624,10 +638,6 @@
{
name: "CloseWatcher",
},
{
name: "CLSScrollAnchoring",
status: "stable",
},
{
name: "CoepReflection",
status: "test",
@ -660,18 +670,18 @@
},
{
name: "CompositeScrollAfterPaint",
status: "experimental",
status: "stable",
},
{
name: "CompressionDictionaryTransport",
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
base_feature: "none",
origin_trial_feature_name: "CompressionDictionaryTransport",
origin_trial_allows_third_party: true,
public: true,
},
{
name: "CompressionDictionaryTransportBackend",
base_feature_status: "disabled",
base_feature: "none",
public: true,
},
{
@ -737,10 +747,6 @@
name: "CorsRFC1918",
base_feature: "none",
},
{
name: "CriticalCHRestartNavigationTiming",
status: "stable",
},
{
name: "CrossFramePerformanceTimeline",
status: "experimental",
@ -796,6 +802,10 @@
name: "CSSCalcSimplificationAndSerialization",
base_feature: "none",
},
{
name: "CSSCapFontUnits",
status: "experimental",
},
{
// Support case-sensitive attribute selector modifier
// https://drafts.csswg.org/selectors-4/#attribute-case
@ -815,7 +825,11 @@
},
{
name: "CSSContainIntrinsicSizeAutoNone",
status: "experimental",
status: "stable",
},
{
name: "CSSContentVisibilityImpliesContainIntrinsicSizeAuto",
status: "stable",
},
// Ablation study to try to measure very roughly memory savings from not saving
// pretokenized strings in CSS custom properties.
@ -853,11 +867,6 @@
status: "stable",
base_feature: "none",
},
{
name: "CSSFoldables",
status: "experimental",
base_feature: "none",
},
{
// @font-face Font property descriptors auto range.
// https://www.w3.org/TR/css-fonts-4/#font-prop-desc
@ -865,15 +874,9 @@
status: "stable",
base_feature: "none",
},
{
name: "CSSFontFamilyMath",
status: "stable",
implied_by: ["MathMLCore"],
base_feature: "none",
},
{
name: "CSSFontSizeAdjust",
status: "test",
status: "experimental",
base_feature: "none",
},
{
@ -907,11 +910,6 @@
status: "stable",
base_feature: "none",
},
{
name: "CSSInitialPseudo",
status: "experimental",
base_feature: "none",
},
{
name: "CSSLayoutAPI",
status: "experimental",
@ -936,30 +934,6 @@
status: "experimental",
base_feature: "none",
},
{
name: "CSSMathDepth",
status: "stable",
implied_by: ["MathMLCore"],
base_feature: "none",
},
{
name: "CSSMathShift",
status: "stable",
implied_by: ["MathMLCore"],
base_feature: "none",
},
{
name: "CSSMathStyle",
status: "stable",
implied_by: ["MathMLCore"],
base_feature: "none",
},
{
name: "CSSMathVariant",
status: "stable",
implied_by: ["MathMLCore"],
base_feature: "none",
},
{
name: "CSSMixBlendModePlusLighter",
status: "stable",
@ -1009,11 +983,6 @@
name: "CSSOffsetPositionAnchor",
status: "stable",
},
{
name: "CSSOverflowForReplacedElements",
status: "stable",
copied_from_base_feature_if: "overridden",
},
{
name: "CSSOverflowMediaFeatures",
status: "stable",
@ -1031,6 +1000,11 @@
status: "stable",
base_feature: "CssPaintingForSpellingGrammarErrors",
},
{
// crbug.com/1443291: Phrase Line Breaking
name: "CSSPhraseLineBreak",
status: "experimental",
},
{
name: "CSSPictureInPicture",
status: "stable",
@ -1044,7 +1018,6 @@
{
name: "CSSPseudoDir",
status: "experimental",
base_feature: "none",
},
{
name: "CSSPseudoHasNonForgivingParsing",
@ -1058,12 +1031,6 @@
status: "test",
base_feature: "none",
},
// Support relative numbers in non-length properties.
// Design doc: https://docs.google.com/document/d/1rikPXstHFK3b8N95QzfDar6dDDrEsuVgw1YF-JgvKQM
{
name: "CSSRelativeNumbersForNonLengthProperties",
status: "experimental",
},
{
// https://drafts.csswg.org/css-cascade-6/#scoped-styles
name: "CSSScope",
@ -1103,6 +1070,11 @@
status: "experimental",
base_feature: "none",
},
{
// https://drafts.csswg.org/css-transitions-2/#defining-before-change-style-the-starting-style-rule
name: "CSSStartingStyle",
status: "stable",
},
{
// Explainer: https://drafts.csswg.org/css-values/#round-func
name: "CSSSteppedValueFunctions",
@ -1133,27 +1105,28 @@
name: "CSSSystemAccentColor",
status: "experimental",
},
{
// crbug.com/1463890: CSS `text-autospace` property
name: "CSSTextAutoSpace",
// The status is not set yet, as this feature flag changes the default behavior, which affects some web tests.
},
{
// TODO(https://crbug.com/1411581):
// https://w3c.github.io/csswg-drafts/css-inline-3/#propdef-leading-trim
name: "CSSTextBoxTrim",
status: "test",
},
// `text-wrap: balance`. crbug.com/1251079
{
name: "CSSTextWrap",
status: "stable",
},
// Use the `NGSCoreLineBreaker` for `text-wrap: balance`. crbug.com/1451205
{
name: "CSSTextWrapBalanceByScore",
depends_on: ["CSSTextWrapPretty"],
status: "stable",
depends_on: ["CSSWhiteSpaceShorthand"],
},
// `text-wrap: pretty`. crbug.com/1432798
{
name: "CSSTextWrapPretty",
status: "experimental",
depends_on: ["CSSTextWrap", "CSSWhiteSpaceShorthand"],
status: "stable",
depends_on: ["CSSWhiteSpaceShorthand"],
},
// Support for CSS Toggles, https://tabatkins.github.io/css-toggle/
{
@ -1170,12 +1143,17 @@
//
// See: https://github.com/w3c/csswg-drafts/issues/8189
name: "CSSTopLayerForTransitions",
status: "stable",
},
{
// Support for the 'border-box', 'content-box' and 'stroke-box' keywords
// for the 'transform-box' property.
name: "CSSTransformBoxAdditionalKeywords",
status: "experimental",
base_feature: "none",
},
{
name: "CSSTransitionDiscrete",
status: "experimental",
status: "stable",
},
{
// A kill switch for the fix for part of https://crbug.com/1180387 .
@ -1235,26 +1213,18 @@
{
name: "CSSWhiteSpaceShorthand",
status: "stable",
depends_on: ["CSSTextWrap"],
},
{
name: "CSSWordBoundaryDetection",
status: "test",
},
{
name: "CSSZoom",
status: "stable",
},
{
// https://github.com/whatwg/html/pull/9195
// https://html.spec.whatwg.org/#dom-customelementregistry-getname
name: "CustomElementsGetName",
status: "experimental",
status: "stable",
},
{
name: "Database",
public: true,
status: "stable",
base_feature: "none",
origin_trial_feature_name: "WebSQL",
},
{
name: "DateInputInlineBlock",
@ -1289,20 +1259,26 @@
// https://github.com/w3c/resource-timing/pull/343
{
name: "DeliveryType",
status: "experimental",
implied_by: ["SpeculationRulesPrefetchFuture"],
status: "stable",
base_feature: "none",
origin_trial_feature_name: "DeliveryType",
},
{
name: "DesktopCaptureDisableLocalEchoControl",
status: "experimental",
base_feature: "none",
},
{
name: "DesktopPWAsAdditionalWindowingControls",
status: "test",
},
{
name: "DesktopPWAsSubApps",
status: "test",
},
{
name: "DetailsStyling",
status: "experimental",
},
{
name: "DeviceAttributes",
origin_trial_feature_name: "DeviceAttributes",
@ -1498,12 +1474,6 @@
origin_trial_feature_name: "EditContext",
status: "experimental",
},
{
// Disables the `white-space` code in `edit_style.cc`.
// Part of crbug.com/1417543, see crrev.com/c/4289333.
name: "EditingStyleWhiteSpace",
status: "stable",
},
{
// Experiment with preventing some instances of mutation XSS
// by escaping "<" and ">" in attribute values.
@ -1593,23 +1563,6 @@
status: "test",
base_feature: "none",
},
{
name: "FedCmAutoReauthn",
depends_on: ["FedCm"],
public: true,
status: "stable",
base_feature: "none",
},
{
// This only exists so we can use RuntimeEnabled in the IDL file
// when either implied_by flag is enabled.
name: "FedCmIdentityProviderInterface",
implied_by: ["FedCmIdpSigninStatus", "FedCmUserInfo", "FedCmIdPRegistration", "FedCmAuthz"],
base_feature: "none",
origin_trial_feature_name: "FedCmIdpSigninStatus",
origin_trial_allows_third_party: true,
origin_trial_os: ["Win", "ChromeOS", "Mac", "Linux"]
},
{
name: "FedCmIdPRegistration",
depends_on: ["FedCm"],
@ -1625,7 +1578,6 @@
base_feature: "none",
origin_trial_feature_name: "FedCmIdpSigninStatus",
origin_trial_allows_third_party: true,
origin_trial_os: ["Win", "ChromeOS", "Mac", "Linux"],
browser_process_read_access: true,
},
{
@ -1635,46 +1587,18 @@
status: "test",
base_feature: "none",
},
{
name: "FedCmIframeSupport",
depends_on: ["FedCm"],
public: true,
status: "stable",
base_feature: "none",
},
{
name: "FedCmLoginHint",
depends_on: ["FedCm"],
public: true,
status: "stable",
base_feature: "none",
},
{
name: "FedCmMultipleIdentityProviders",
depends_on: ["FedCm"],
base_feature: "none",
public: true,
},
{
name: "FedCmRpContext",
depends_on: ["FedCm"],
public: true,
status: "stable",
base_feature: "none",
},
{
name: "FedCmSelectiveDisclosure",
depends_on: ["FedCm"],
public: true,
base_feature: "none",
},
{
name: "FedCmUserInfo",
depends_on: ["FedCm"],
public: true,
status: "stable",
base_feature: "none",
},
{
name: "FencedFrames",
base_feature: "none",
@ -1702,6 +1626,11 @@
copied_from_base_feature_if: "enabled_or_overridden",
public: true,
},
{
// The Blink runtime-enabled feature name for the API's IDL.
name: "FetchLaterAPI",
public: true,
},
{
name: "FetchUploadStreaming",
status: "stable",
@ -1744,6 +1673,16 @@
status: "experimental",
base_feature: "none",
},
{
// The FileSystemHandle.getCloudIdentifiers() method (see
// crbug.com/1443354).
name: "FileSystemAccessGetCloudIdentifiers",
status: {
"ChromeOS_Ash": "experimental",
"ChromeOS_Lacros": "experimental",
"default": "",
}
},
{
// Non-OPFS File System Access API.
name: "FileSystemAccessLocal",
@ -1756,6 +1695,13 @@
status: "stable",
base_feature: "none",
},
{
// The FileSystemObserver interface for the File System Access API.
// See https://crbug.com/1019297.
name: "FileSystemObserver",
depends_on: ["FileSystemAccess"],
status: "experimental",
},
{
name: "FirstRectForRangeVertical",
status: "stable",
@ -1764,6 +1710,10 @@
name: "FixedElementsDontOverscroll",
status: "stable",
},
{
name: "FixOffsetInMultiColVerticalRl",
status: "stable",
},
{
name: "Fledge",
base_feature: "none",
@ -1778,6 +1728,14 @@
origin_trial_allows_third_party: true,
public: true,
},
{
name: "FledgeDirectFromSellerSignalsHeaderAdSlot",
status: "test",
},
{
name: "FledgeNegativeTargeting",
status: "test",
},
{
name: "FluentScrollbars",
base_feature: "none",
@ -1811,8 +1769,7 @@
},
{
name: "FontVariantPosition",
status: "experimental",
base_feature: "none",
status: "stable",
},
{
// TODO(crbug.com/1231644): This flag is being kept (even though the
@ -1889,15 +1846,6 @@
status: "experimental",
base_feature: "FullscreenPopupWindows"
},
{
// If enabled, `window.screen` always provides display dimensions.
// Otherwise, `window.screen` provides viewport dimensions in fullscreen
// as a speculative site compatibility measure, because web authors may
// assume that screen dimensions match window.innerWidth/innerHeight while
// a page is fullscreen, but that is not always true. crbug.com/1367416
name: "FullscreenScreenSizeMatchesDisplay",
status: "stable",
},
{
name: "GamepadButtonAxisEvents",
status: "experimental",
@ -1914,6 +1862,13 @@
public: true,
status: "test",
},
{
// Kill switch for bug fix of https://crbug.com/867616 and
// https://crbug.com/1451020
// TODO(xiaochengh): Remove it in M119.
name: "GetComputedStyleOutOfFlowInsetsFix",
status: "stable",
},
{
name: "GetDisplayMedia",
public: true,
@ -1942,6 +1897,11 @@
},
base_feature: "none",
},
{
name: "HasUAVisualTransition",
status: "test",
base_feature: "none",
},
// HighlightAPI's custom highlights use HighlightInheritance's behavior even
// if the HighlightInheritance feature is not enabled.
{
@ -1978,12 +1938,6 @@
// yielding heuristics.
name: "HTMLParserYieldAndDelayOftenForTesting",
},
{
// A kill-switch for crbug.com/1412729
// (enabling the `v` flag for `pattern` RegExps).
name: "HTMLPatternRegExpUnicodeSets",
status: "stable",
},
{
// TODO(crbug.com/1307772): Enables the Popover API.
name: "HTMLPopoverAttribute",
@ -2001,11 +1955,6 @@
status: "experimental",
base_feature: "none",
},
{
name: "IDBBatchGetAll",
status:"experimental",
base_feature: "none",
},
{
name: "IdleDetection",
public: true,
@ -2062,6 +2011,11 @@
status: {"Android": "test", "default": "stable"},
base_feature: "none",
},
{
// crbug.com/1420675
name: "InsertLineBreakIfPhrasingContent",
status: {"Android": "test", "default": "stable"},
},
{
name: "InstalledApp",
public: true,
@ -2073,7 +2027,12 @@
status: "experimental",
},
{
"name": "IntersectionOptimization",
name: "IntersectionOptimization",
status: "experimental",
},
{
name: "InvertedColors",
status: "experimental",
},
{
name: "JavaScriptCompileHintsMagicRuntime",
@ -2094,35 +2053,40 @@
base_feature: "none",
settable_from_internals: true,
},
{
name: "LayoutDisableWebkitBoxSafeAlignment",
status: "stable",
},
{
name: "LayoutFlexNewColumnAlgorithm",
status: "stable",
},
{
name: "LayoutFlexNewRowAlgorithm",
status: "test",
implied_by: ["LayoutFlexNewRowAlgorithmV2",],
implied_by: ["LayoutFlexNewRowAlgorithmV2"],
},
{
name: "LayoutFlexNewRowAlgorithmV2",
},
{
name: "LayoutFlexNewRowAlgorithmV3",
status: "test",
},
{
name: "LayoutFlexSafeAlignment",
name: "LayoutIgnoreMarginsForSticky",
status: "stable",
},
{
name: "LayoutNewTextAreaScrollbar",
name: "LayoutNewFixedPositionInvalidation",
status: "stable",
},
{
name: "LayoutNewGridStaticPosition",
},
{
name: "LayoutNewStickyLogic",
status: "stable",
},
{
// crbug.com/1353190
name: "LayoutNGNoCopyBack",
depends_on: ["LayoutNGNoLocation", "RemoveConvertToLayerCoords", "ScrollableAreaNoSnapping"],
depends_on: ["LayoutNGNoLocation", "ScrollableAreaNoSnapping"],
status: "test",
},
{
@ -2137,9 +2101,13 @@
},
{
name: "LayoutNGSubgrid",
status: "experimental",
status: "stable",
base_feature: "none",
},
{
name: "LayoutOverflowNoClone",
status: "stable",
},
{
name: "LazyFrameLoading",
public: true,
@ -2224,10 +2192,6 @@
name: "ManagedConfiguration",
status: "stable",
},
{
name: "MathMLCore",
status: "stable",
},
{
name:"MeasureMemory",
status:"stable",
@ -2309,6 +2273,10 @@
status: "stable",
base_feature: "none",
},
{
name: "MediaSessionEnterPictureInPicture",
public: true,
},
{
name: "MediaSessionSlides",
status: "stable",
@ -2341,7 +2309,6 @@
name: "MiddleClickAutoscroll",
status: "test",
base_feature: "none",
base_feature_status: "enabled",
},
{
name: "MobileLayoutTheme",
@ -2482,6 +2449,13 @@
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
// This is an optimization that should not be observable, but just in case,
// this is a killswitch. This can be removed once M117 ships to stable and
// no regressions are reported.
{
name: "OptimizedNodeCloneOrder",
status: "stable",
},
{
name: "OrientationEvent",
status: {"Android": "stable"},
@ -2639,6 +2613,14 @@
status: {"Android": "", "default": "stable"},
base_feature: "none",
},
{
name: "PaintFlexGridSortedByOrder",
status: "stable",
},
{
name: "PaintNewReplacedInvalidation",
status: "stable",
},
{
name: "PaintUnderInvalidationChecking",
base_feature: "none",
@ -2696,6 +2678,11 @@
status: "experimental",
base_feature: "none",
},
{
name: "PaymentRequestAllowOneActivationlessShow",
public: true,
status: "test",
},
{
name: "PaymentRequestMerchantValidationEvent",
status: "experimental",
@ -2736,6 +2723,14 @@
status: "experimental",
base_feature: "none",
},
{
// Tracking bug for the implementation: https://crbug.com/1462930
name: "PermissionElement",
// We don't set the feature's status because the feature is implemented
// at both Chromium side and blink side. This runtime blink feature
// doesn't fully work by itself.
base_feature: "none",
},
{
name: "Permissions",
public: true,
@ -2806,6 +2801,10 @@
status: "experimental",
base_feature: "none",
},
{
name: "PrefersReducedTransparency",
status: "experimental",
},
// This feature is deprecated and we are evangelizing affected sites.
// See https://crbug.com/346236 for current status.
{
@ -2830,6 +2829,12 @@
status: "stable",
base_feature: "none",
},
{
// When enabled, gives the option to pretty-print JSON documents to
// cleanly format the JSON and make it readable.
name:"PrettyPrintJSONDocument",
status: "experimental",
},
// The RTE feature encompasses multiple APIs, including: Attribution
// Reporting, FLEDGE, Topics and Fenced Frames.
{
@ -2889,6 +2894,10 @@
status: "experimental",
base_feature: "none",
},
{
name: "RareBorderPaddingInflow",
status: "stable",
},
{
name: "ReadableStreamTeeCloneForBranch2",
status: "stable",
@ -2939,11 +2948,6 @@
status: {"Android": "stable", "default": ""},
base_feature: "none",
},
{
// crbug.com/1432839
name: "RemoveConvertToLayerCoords",
status: "stable",
},
{
name: "RemoveDanglingMarkupInTarget",
status: "experimental",
@ -2953,10 +2957,6 @@
name: "RemoveDataUrlInSvgUse",
status: "experimental",
},
{
name: "RemoveLegacySizeComputation",
status: "stable",
},
{
name: "RemoveMobileViewportDoubleTap",
public: true,
@ -2966,8 +2966,9 @@
{
// Non-standard appearance values should be removed. This feature removes
// inner-spin-button, media-slider, media-sliderthumb, media-volume-slider
// media-volume-sliderthumb, searchfield-cancel-button,
// sliderthumb-horizontal, sliderthumb-vertical.
// media-volume-sliderthumb, push-button, searchfield-cancel-button,
// slider-horizontal, sliderthumb-horizontal, sliderthumb-vertical,
// square-button.
// https://drafts.csswg.org/css-ui-4/#appearance-switching
name: "RemoveNonStandardAppearanceValue",
status: "experimental",
@ -3051,13 +3052,12 @@
status: "experimental",
base_feature: "none",
},
// Enables the use of |RTCRtpTransceiver::setOfferedRtpHeaderExtensions|,
// |RTCRtpTransceiver::headerExtensionsToOffer|, and
// |RTCRtpTransceiver::headerExtensionsNegotiated|.
// Enables the use of |RTCRtpTransceiver::getHeaderExtensionsToNegotiate|,
// |RTCRtpTransceiver::setHeaderExtensionsToNegotiate|, and
// |RTCRtpTransceiver::getNegotiatedHeaderExtensions|.
{
name: "RTCRtpHeaderExtensionControl",
status: "experimental",
base_feature: "none",
status: "stable",
},
{
name: "RTCStatsRelativePacketArrivalDelay",
@ -3148,6 +3148,10 @@
},
// Implements documentElement.scrollTop/Left and bodyElement.scrollTop/Left
// as per the spec, matching other Web engines.
//
// This flag can't be removed until the Android min SDK version is 28
// (i.e., 'P') or later. See AWSettings.setScrollTopLeftInteropEnabled
// and its caller.
{
name: "ScrollTopLeftInterop",
status: "stable",
@ -3260,6 +3264,11 @@
origin_trial_allows_third_party: true,
public: true,
},
{
name: "SharedStorageAPIM118",
base_feature: "none",
public: true,
},
{
name: "SharedWorker",
public: true,
@ -3273,6 +3282,10 @@
status: "experimental",
base_feature: "none",
},
{
name: "SimplifiedClearPropertyTreeChange",
status: "stable",
},
{
name: "SiteInitiatedMirroring",
status: "experimental",
@ -3308,6 +3321,7 @@
name: "SoftNavigationHeuristics",
status: "experimental",
depends_on: ["NavigationId"],
origin_trial_allows_third_party: true,
origin_trial_feature_name: "SoftNavigationHeuristics",
},
{
@ -3417,8 +3431,10 @@
base_feature: "none",
},
{
// Enabled when blink::features::kStorageAccessAPI is enabled.
// Enabled when blink::features::kStorageAccessAPI or
// permissions::features::kPermissionStorageAccessAPI is enabled.
name: "StorageAccessAPI",
public: true,
status: "experimental",
base_feature_status: "enabled",
},
@ -3455,10 +3471,18 @@
name: "SvgMapLocalToAncestorFix",
status: "stable",
},
{
name: "SvgNoPixelSnappingScaleAdjustment",
status: "stable",
},
{
name: "SvgRasterOptimizations",
status: "experimental",
},
{
name: "SvgTextSkipZeroLengthItems",
status: "stable",
},
{
name: "SynthesizedKeyboardEventsForAccessibilityActions",
status: "experimental",
@ -3621,13 +3645,6 @@
status: "experimental",
base_feature: "none",
},
{
// Allow unbalanced columns (no implicit breaks), even if the block-size
// of the multicol container isn't constrained, rather than forcing column
// balancing in such cases. See crbug.com/1156312
name: "UnconstrainedColumnFillAuto",
status: "stable",
},
{
name: "UnexposedTaskIds",
base_feature: "none",
@ -3645,6 +3662,17 @@
status: "experimental",
base_feature: "none",
},
{
name: "URLSearchParamsHasAndDeleteMultipleArgs",
status: "stable",
},
{
name: "UseBeginFramePresentationFeedback",
status: {
"ChromeOS_Ash": "stable",
"ChromeOS_Lacros": "stable",
},
},
{
// Makes the global root scrollbars follow the preferred color scheme
// by default. Please see more details: crbug.com/1423087.
@ -3706,6 +3734,7 @@
{
name: "ViewportSegments",
status: "experimental",
public: true,
base_feature: "none",
},
{
@ -3797,11 +3826,15 @@
name: "WebAppTabStrip",
status: "experimental",
base_feature: "none",
origin_trial_feature_name: "WebAppTabStrip",
origin_trial_os: ["chromeos"],
},
{
name: "WebAppTabStripCustomizations",
status: "experimental",
base_feature: "none",
origin_trial_feature_name: "WebAppTabStrip",
origin_trial_os: ["chromeos"],
},
{
name: "WebAppTranslations",
@ -3924,8 +3957,13 @@
{
name: "WebEnvironmentIntegrity",
status: "experimental",
base_feature: "none",
origin_trial_feature_name: "WebEnvironmentIntegrity",
// base_feature is meant as kill-switch. The RuntimeFeature should follow
// the `status` field or Origin Trial unless explicitly overriden by
// Finch / command line flags.
base_feature_status: "enabled",
copied_from_base_feature_if: "overridden",
origin_trial_allows_third_party: true,
},
{
name: "WebFontResizeLCP",
@ -3954,14 +3992,6 @@
base_feature: "none",
public: true,
},
{
name: "WebGPU",
base_feature: "none",
// Note that this isn't enough to enable WebGPU and that access to
// WebGPU is further gated on the "WebGPUService" feature exposing GPU
// process access to WebGPU to the renderer process.
status: "stable",
},
{
// WebGPU developer features are deliberately not enabled by experimental
// web platform features.
@ -3995,6 +4025,11 @@
status: "test",
base_feature: "none",
},
// Kill switch for making BigInt handling in WebIDL use ToBigInt.
{
name: "WebIDLBigIntUsesToBigInt",
status: "stable",
},
// Legacy ::-webkit-scrollbar* pseudo element styling. Enabled for stable
// but configurable via WebPreferences.
{
@ -4023,7 +4058,7 @@
},
{
name: "WebSerialBluetooth",
status: "experimental",
status: "stable",
base_feature: "none",
},
// WebShare is enabled by default on Android.
@ -4149,7 +4184,6 @@
{
name: "WGIGamepadTriggerRumble",
status: "test",
base_feature: "none",
},
// If enabled, window.default[Ss]tatus will be supported. This is disabled
// by default, and is here to allow this behavior to be re-enabled via Finch

View File

@ -65,6 +65,7 @@ generate_grd("build_grdp") {
"icon_expand_more.svg",
"icon_filetype_generic.svg",
"icon_folder_open.svg",
"icon_history.svg",
"icon_journeys.svg",
"icon_more_vert.svg",
"icon_picture_delete.svg",