M126 stage 2 and a half stopped at incognito.svg

This commit is contained in:
Alexander Frick 2024-07-15 19:19:23 -05:00
parent d393f1875d
commit c1b6381366
12 changed files with 1506 additions and 151 deletions

View file

@ -46,7 +46,7 @@
<DL><p>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/126.0.6478.190:chrome/BUILD.gn;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.gn - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/126.0.6478.190:chrome/app/theme/;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">theme - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/126.0.6478.190:chrome/app/theme/theme_resources.grd;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">theme - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/126.0.6478.190:chrome/app/theme/theme_resources.grd;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">theme_resources.grd - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/126.0.6478.190:content/gpu/BUILD.gn;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.gn - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/126.0.6478.190:media/base/media_switches.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">media_switches.cc - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/126.0.6478.190:media/filters/ffmpeg_video_decoder.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">ffmpeg_video_decoder.cc - Chromium Code Search</A>
@ -158,6 +158,7 @@
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/126.0.6478.190:components/bookmarks/browser/bookmark_utils.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">bookmark_utils.cc - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/_/chromium/v8/v8.git/+/556665385d5cdc2a0793b977d373da88091a7208:BUILD.gn;bpv=1" ADD_DATE="1679176327" 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.gn - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/126.0.6478.190:third_party/blink/renderer/platform/runtime_enabled_features.json5;bpv=1" ADD_DATE="1682699663" 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">runtime_enabled_features.json5 - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/126.0.6478.190:third_party/blink/renderer/modules/webaudio/audio_context.cc;bpv=1" ADD_DATE="1682699663" 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">audio_context.cc - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/126.0.6478.190:ui/webui/resources/images/;bpv=1" ADD_DATE="1682730029" 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">images - Chromium Code Search</A>
<DT><A HREF="https://source.chromium.org/chromium/chromium/src/+/refs/tags/126.0.6478.190:chromeos/chromeos_strings.grd;bpv=1" ADD_DATE="1682730029" 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">chromeos_strings.grd - Chromium Code Search</A>
</DL><p>

View file

@ -127,6 +127,14 @@
<structure type="chrome_scaled_image" name="IDR_NOTIFICATION_EASYUNLOCK_ENABLED" file="cros/notification_easyunlock_enabled.png" />
</if>
<if expr="not is_android">
<if expr="_google_chrome">
<then>
<structure type="chrome_scaled_image" name="IDR_LENS_PERMISSION_MODAL_IMAGE" file="google_chrome/lens_permission_modal_image.png" />
</then>
<else>
<structure type="chrome_scaled_image" name="IDR_LENS_PERMISSION_MODAL_IMAGE" file="common/safer_with_google_shield.png" />
</else>
</if>
<structure type="chrome_scaled_image" name="IDR_NTP_CART_DISCOUNT_CONSENT_DARK" file="common/ntp_cart_discount_consent_dark.png" />
<structure type="chrome_scaled_image" name="IDR_NTP_CART_DISCOUNT_CONSENT_LIGHT" file="common/ntp_cart_discount_consent_light.png" />
<structure type="chrome_scaled_image" name="IDR_NTP_FAVICON" file="common/favicon_ntp.png" />
@ -377,8 +385,7 @@
<if expr="not is_android">
<structure type="chrome_scaled_image" name="IDR_TAILORED_SECURITY_CONSENTED" file="common/safer_with_google_shield.png" />
<structure type="chrome_scaled_image" name="IDR_TAILORED_SECURITY_CONSENTED_DARK" file="common/safer_with_google_shield_dark.png" />
<structure type="chrome_scaled_image" name="IDR_TAILORED_SECURITY_UNCONSENTED" file="common/tailored_security_unconsented.png" />
<structure type="chrome_scaled_image" name="IDR_TAILORED_SECURITY_UNCONSENTED_UPDATED" file="common/safer_with_google_shield.png" />
<structure type="chrome_scaled_image" name="IDR_TAILORED_SECURITY_UNCONSENTED" file="common/safer_with_google_shield.png" />
</if>
<if expr="_google_chrome">
<if expr="not is_android">

View file

@ -4,6 +4,10 @@
#include "chrome/common/media/cdm_registration.h"
#include <memory>
#include <optional>
#include <utility>
#include "base/check.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
@ -103,8 +107,8 @@ std::unique_ptr<content::CdmInfo> CreateCdmInfoFromWidevineDirectory(
#if (BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT) || BUILDFLAG(BUNDLE_WIDEVINE_CDM)) && \
(BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS))
// On Linux/ChromeOS we have to preload the CDM since it uses the zygote
// sandbox. On Windows and Mac, the bundled CDM is handled by the component
// updater.
// sandbox. On Windows and Mac, CDM registration is handled by Component
// Update (as the CDM can be loaded only when needed).
// This code checks to see if the Widevine CDM was bundled with Chrome. If one
// can be found and looks valid, it returns the CdmInfo for the CDM. Otherwise
@ -126,24 +130,31 @@ content::CdmInfo* GetBundledWidevine() {
#if BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT) && \
(BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS))
// This code checks to see if a component updated Widevine CDM can be found. If
// there is one and it looks valid, return the CdmInfo for that CDM. Otherwise
// return nullptr.
content::CdmInfo* GetComponentUpdatedWidevine() {
// We only want to do this on the first call, as the component updater may run
// and download a new version once Chrome has been running for a while. Since
// the first returned version will be the one loaded into the zygote, we want
// to return the same thing on subsequent calls.
static base::NoDestructor<std::unique_ptr<content::CdmInfo>> s_cdm_info(
[]() -> std::unique_ptr<content::CdmInfo> {
auto install_dir = GetLatestComponentUpdatedWidevineCdmDirectory();
if (install_dir.empty()) {
return nullptr;
}
// This code checks to see if Component Updater picked a version of the Widevine
// CDM to be used last time it ran. (Component Updater may choose the bundled
// CDM if there is not a new version available for download.) If there is one
// and it looks valid, return the CdmInfo for that CDM. Otherwise return
// nullptr.
std::unique_ptr<content::CdmInfo> GetHintedWidevine() {
// Ideally this would cache the result, as Component Update may run and
// download a new version once Chrome has been running for a while. However,
// RegisterCdmInfo() will be called by different processes (the pre-zygote
// process and the browser process), so caching it as a static variable ends
// up with multiple copies anyways. As long as this is called before the
// Component Update process for the Widevine CDM runs, it should return the
// same version so what is loaded in the zygote is the same as what ends up
// registered in the browser process. (This function also ends up being called
// by tests, so caching the result means that we can't change what the test
// pretends Component Update returns.)
// TODO(crbug.com/324117290): Investigate if the pre-zygote data can be used
// by the browser process so that RegisterCdmInfo() is only called once.
auto install_dir = GetHintedWidevineCdmDirectory();
if (install_dir.empty()) {
DVLOG(1) << __func__ << ": no version available";
return nullptr;
}
return CreateCdmInfoFromWidevineDirectory(install_dir);
}());
return s_cdm_info->get();
return CreateCdmInfoFromWidevineDirectory(install_dir);
}
#endif // BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT) &&
// (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS))
@ -170,42 +181,86 @@ void AddSoftwareSecureWidevine(std::vector<content::CdmInfo>* cdms) {
}
#endif // defined(WIDEVINE_CDM_MIN_GLIBC_VERSION)
// The Widevine CDM on Linux needs to be registered (and loaded) before the
// zygote is locked down. The CDM can be found from the version bundled with
// Chrome (if BUNDLE_WIDEVINE_CDM = true) and/or the version downloaded by
// the component updater (if ENABLE_WIDEVINE_CDM_COMPONENT = true). If two
// versions exist, take the one with the higher version number.
// The Widevine CDM on Linux/ChromeOS needs to be registered (and loaded)
// before the zygote is locked down. The CDM can be found from the version
// bundled with Chrome (if BUNDLE_WIDEVINE_CDM = true) and/or the version
// selected by Component Update (if ENABLE_WIDEVINE_CDM_COMPONENT = true).
//
// Note that the component updater will detect the bundled version, and if
// there is no newer version available, select the bundled version. In this
// case both versions will be the same and point to the same directory, so
// it doesn't matter which one is loaded.
// If both settings are set, then there are several scenarios that need to
// be handled:
// 1. First launch. There will only be a bundled CDM as Component Update
// hasn't run, so load the bundled CDM.
// 2. Subsequent launches. Component Update should have run and updated the
// hint file. It could have selected the bundled version as the desired
// CDM, or downloaded a different version that should be used instead.
// In case of a version downgrade the bundled CDM version is saved so
// that we can detect the downgrade. Generally we should use the version
// selected by Component Update.
// 3. New version of Chrome, containing a different bundled CDM. For this
// case we should select the CDM with the higher version.
//
// Note that Component Update will detect the bundled version, and if there is
// no newer version available, select the bundled version. In this case both
// versions will be the same and point to the same directory, so it doesn't
// matter which one is loaded. In the case of a version downgrade, the CDM
// selected by Component Update may have a lower version than the bundled CDM.
// We should still use the version selected by Component Update (except for
// case #3 above).
content::CdmInfo* bundled_widevine = nullptr;
#if (BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT) || BUILDFLAG(BUNDLE_WIDEVINE_CDM))
bundled_widevine = GetBundledWidevine();
#endif
content::CdmInfo* updated_widevine = nullptr;
// The hinted Widevine CDM is the CDM selected by Component Update. It may be
// the bundled CDM if it matches the version Component Update determines that
// should be used.
std::unique_ptr<content::CdmInfo> hinted_widevine;
#if BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT)
updated_widevine = GetComponentUpdatedWidevine();
hinted_widevine = GetHintedWidevine();
#endif
// If only a bundled version is available, or both are available and the
// bundled version is not less than the updated version, register the
// bundled version. If only the updated version is available, or both are
// available and the updated version is greater, then register the updated
// version. If neither are available, then nothing is registered.
if (bundled_widevine &&
(!updated_widevine ||
bundled_widevine->version >= updated_widevine->version)) {
if (bundled_widevine && !hinted_widevine) {
// Only a bundled version is available, so use it.
VLOG(1) << "Registering bundled Widevine " << bundled_widevine->version;
cdms->push_back(*bundled_widevine);
} else if (updated_widevine) {
VLOG(1) << "Registering component updated Widevine "
<< updated_widevine->version;
cdms->push_back(*updated_widevine);
} else {
} else if (!bundled_widevine && hinted_widevine) {
// Only a component updated version is available, so use it.
VLOG(1) << "Registering hinted Widevine " << hinted_widevine->version;
cdms->push_back(*hinted_widevine);
} else if (!bundled_widevine && !hinted_widevine) {
VLOG(1) << "Widevine enabled but no library found";
} else {
// Both a bundled CDM and a hinted CDM found, so choose between them.
base::Version bundled_version = bundled_widevine->version;
base::Version hinted_version = hinted_widevine->version;
DVLOG(1) << __func__ << " bundled: " << bundled_version;
DVLOG(1) << __func__ << " hinted: " << hinted_version;
bool choose_bundled;
#if BUILDFLAG(IS_CHROMEOS_LACROS)
// Dowgrading doesn't work on LaCros, so choose the highest version CDM,
// preferring the bundled CDM over the hinted CDM if the versions are the
// same. See bug for details.
// TODO(b/329869597): Get this working on LaCros.
choose_bundled = bundled_version >= hinted_version;
#else
// On all other platforms (Linux and ChromeOS Ash) we want to pick the
// hinted version, except in the case the bundled CDM is newer than the
// hinted CDM and is different than the previously bundled CDM.
choose_bundled =
bundled_version > hinted_version &&
bundled_version != GetBundledVersionDuringLastComponentUpdate();
#endif // BUILDFLAG(IS_CHROMEOS_LACROS)
if (choose_bundled) {
VLOG(1) << "Choosing bundled Widevine " << bundled_version << " from "
<< bundled_widevine->path;
cdms->push_back(*bundled_widevine);
} else {
VLOG(1) << "Choosing hinted Widevine " << hinted_version << " from "
<< hinted_widevine->path;
cdms->push_back(*hinted_widevine);
}
}
#endif // BUILDFLAG(IS_ANDROID)
}

View file

@ -48,7 +48,6 @@ target(link_target_type, "gpu_sources") {
deps = [
"//base",
"//base/third_party/dynamic_annotations",
"//build:branding_buildflags",
"//build:chromeos_buildflags",
"//components/viz/service",

View file

@ -109,7 +109,7 @@ const char kMinVideoDecoderOutputBufferSize[] =
// Forces AudioManagerFuchsia to assume that the AudioCapturer implements echo
// cancellation.
// TODO(crbug.com/852834): Remove this once AudioManagerFuchsia is updated to
// TODO(crbug.com/42050621): Remove this once AudioManagerFuchsia is updated to
// get this information from AudioCapturerFactory.
const char kAudioCapturerWithEchoCancellation[] =
"audio-capturer-with-echo-cancellation";
@ -242,6 +242,13 @@ MEDIA_EXPORT extern const char kLacrosUseChromeosProtectedAv1[] =
// in testing where we do want to go through the permission flow even in dev
// mode. This can be enabled by this flag.
const char kAllowRAInDevMode[] = "allow-ra-in-dev-mode";
// These flags are passed from ash-chrome to lacros-chrome that correspond to
// the directories used for the Widevine CDM (the bundled CDM and the Component
// Updated CDM).
const char kCrosWidevineBundledDir[] = "cros-bundled-widevine";
const char kCrosWidevineComponentUpdatedHintFile[] =
"cros-component-updated-widevine-hint-file";
#endif // BUILDFLAG(IS_CHROMEOS)
namespace autoplay {
@ -278,10 +285,14 @@ const char kCastStreamingForceDisableHardwareH264[] =
"cast-streaming-force-disable-hardware-h264";
const char kCastStreamingForceDisableHardwareVp8[] =
"cast-streaming-force-disable-hardware-vp8";
const char kCastStreamingForceDisableHardwareVp9[] =
"cast-streaming-force-disable-hardware-vp9";
const char kCastStreamingForceEnableHardwareH264[] =
"cast-streaming-force-enable-hardware-h264";
const char kCastStreamingForceEnableHardwareVp8[] =
"cast-streaming-force-enable-hardware-vp8";
const char kCastStreamingForceEnableHardwareVp9[] =
"cast-streaming-force-enable-hardware-vp9";
#if !BUILDFLAG(IS_ANDROID)
const char kCastMirroringTargetPlayoutDelay[] =
@ -351,12 +362,6 @@ BASE_FEATURE(kResumeBackgroundVideo,
);
#if BUILDFLAG(IS_MAC)
// Enables system audio mirroring using ScreenCaptureKit when casting the
// screen on macOS 13.0+.
BASE_FEATURE(kMacLoopbackAudioForCast,
"MacLoopbackAudioForCast",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables system audio sharing using ScreenCaptureKit when screen sharing on
// macOS 13.0+.
BASE_FEATURE(kMacLoopbackAudioForScreenShare,
@ -405,7 +410,7 @@ BASE_FEATURE(kUseAndroidOverlayForSecureOnly,
base::FEATURE_DISABLED_BY_DEFAULT);
// Allows usage of OS-level (platform) audio encoders.
// TODO(crbug.com/1522976): re-enable platform audio encoders on arm64 win when
// TODO(crbug.com/41495931): re-enable platform audio encoders on arm64 win when
// querying for OS support works as expected.
BASE_FEATURE(kPlatformAudioEncoder,
"PlatformAudioEncoder",
@ -596,43 +601,13 @@ BASE_FEATURE(kUseWritePixelsYUV,
// hardware video decoders.
BASE_FEATURE(kUseMultiPlaneFormatForHardwareVideo,
"UseMultiPlaneFormatForHardwareVideo",
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_FUCHSIA) || \
BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables creating single shared image and mailbox for multi-planar formats for
// software video decoders.
BASE_FEATURE(kUseMultiPlaneFormatForSoftwareVideo,
"UseMultiPlaneFormatForSoftwareVideo",
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_FUCHSIA) || \
BUILDFLAG(IS_WIN)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
#if BUILDFLAG(IS_ANDROID)
// Enables using RasterInterface in VideoResourceUpdater (note: this is
// unconditionally the case on all other platforms).
BASE_FEATURE(kRasterInterfaceInVideoResourceUpdater,
"RasterInterfaceInVideoResourceUpdater",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
// Enables binding software video NV12/P010 GMBs as separate shared images.
BASE_FEATURE(kMultiPlaneSoftwareVideoSharedImages,
"MultiPlaneSoftwareVideoSharedImages",
#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_WIN)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
// Enable binding multiple shared images to a single GpuMemoryBuffer for video
// frames created by video capture.
@ -946,6 +921,11 @@ const base::FeatureParam<std::string> kMediaFoundationClearKeyCdmPathForTesting{
&kExternalClearKeyForTesting, "media_foundation_cdm_path", ""};
#endif // BUILDFLAG(IS_WIN)
// Enables the On-Device Web Speech feature on supported devices.
BASE_FEATURE(kOnDeviceWebSpeech,
"OnDeviceWebSpeech",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables the Live Caption feature on supported devices.
BASE_FEATURE(kLiveCaption, "LiveCaption", base::FEATURE_ENABLED_BY_DEFAULT);
@ -1025,11 +1005,6 @@ BASE_FEATURE(kLiveCaptionWebAudio,
"LiveCaptionWebAudio",
base::FEATURE_ENABLED_BY_DEFAULT);
// Live Caption runs system-wide on ChromeOS, as opposed to just in the browser.
BASE_FEATURE(kLiveCaptionSystemWideOnChromeOS,
"LiveCaptionSystemWideOnChromeOS",
base::FEATURE_DISABLED_BY_DEFAULT);
// Live Translate translates captions generated by Live Caption.
BASE_FEATURE(kLiveTranslate,
"LiveTranslate",
@ -1079,7 +1054,7 @@ BASE_FEATURE(kHardwareSecureDecryptionFallback,
// (CDM) after failures or crashes to fallback to software secure CDMs should
// use per site logic.
const base::FeatureParam<bool> kHardwareSecureDecryptionFallbackPerSite{
&kHardwareSecureDecryptionFallback, "per_site", false};
&kHardwareSecureDecryptionFallback, "per_site", true};
// The minimum and maximum number of days to disable hardware secure Content
// Decryption Module (CDM) as part of the fallback logic.
@ -1141,13 +1116,6 @@ BASE_FEATURE(kAutoPictureInPictureForVideoPlayback,
"AutoPictureInPictureForVideoPlayback",
base::FEATURE_DISABLED_BY_DEFAULT);
// Whether the autoplay policy should ignore Web Audio. When ignored, the
// autoplay policy will be hardcoded to be the legacy one on based on the
// platform
BASE_FEATURE(kAutoplayIgnoreWebAudio,
"AutoplayIgnoreWebAudio",
base::FEATURE_ENABLED_BY_DEFAULT);
// Whether we should show a setting to disable autoplay policy.
// TODO: Alex313031 Possibly re-enable? Causes Profile picker crash
BASE_FEATURE(kAutoplayDisableSettings,
@ -1170,7 +1138,7 @@ BASE_FEATURE(kAllowNonSecureOverlays,
// Enables support for playback of encrypted AV1 content.
BASE_FEATURE(kEnableEncryptedAV1,
"EnableEncryptedAV1",
base::FEATURE_DISABLED_BY_DEFAULT);
base::FEATURE_ENABLED_BY_DEFAULT);
// Allow FrameInfoHelper to guess coded size information for MediaCodec frames.
BASE_FEATURE(kMediaCodecCodedSizeGuessing,
@ -1253,9 +1221,10 @@ BASE_FEATURE(kAllowMediaCodecSoftwareDecoder,
BASE_FEATURE(kBuiltInHlsPlayer,
"BuiltInHlsPlayer",
base::FEATURE_ENABLED_BY_DEFAULT);
);
BASE_FEATURE(kBuiltInHlsMP4,
"kBuiltInHlsMP4",
"BuiltInHlsMP4",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif // BUILDFLAG(ENABLE_HLS_DEMUXER)
@ -1305,7 +1274,7 @@ BASE_FEATURE(kUSeSequencedTaskRunnerForVEA,
// Expiry: When GLImageProcessor is deleted
BASE_FEATURE(kUseGLForScaling,
"UseGLForScaling",
base::FEATURE_DISABLED_BY_DEFAULT);
base::FEATURE_ENABLED_BY_DEFAULT);
// Experimental support for GL based image processing. On some architectures,
// the hardware accelerated video decoder outputs frames in a format not
// understood by the display controller. We usually use LibYUV to convert these
@ -1328,7 +1297,15 @@ BASE_FEATURE(kPreferSoftwareMT21,
// Expiry: When Vulkan detiling is thoroughly tested and verified to work.
BASE_FEATURE(kEnableProtectedVulkanDetiling,
"EnableProtectedVulkanDetiling",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(USE_CHROMEOS_PROTECTED_MEDIA)
// Enable use of HW based L1 Widevine DRM via the cdm-oemcrypto daemon on
// ChromeOS. This flag is temporary while we finish development.
// Expiry: M128
BASE_FEATURE(kEnableArmHwdrm,
"EnableArmHwdrm",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(USE_CHROMEOS_PROTECTED_MEDIA)
#endif // defined(ARCH_CPU_ARM_FAMILY)
#if BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
// ChromeOS has one of two VideoDecoder implementations active based on
@ -1579,6 +1556,15 @@ BASE_FEATURE(kRecordWebAudioEngagement,
"RecordWebAudioEngagement",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX)
// Reduces the number of buffers needed in the output video frame pool to
// populate the Renderer pipeline for hardware accelerated VideoDecoder in
// non-low latency scenarios.
BASE_FEATURE(kReduceHardwareVideoDecoderBuffers,
"ReduceHardwareVideoDecoderBuffers",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
// The following Media Engagement flags are not enabled on mobile platforms:
// - MediaEngagementBypassAutoplayPolicies: enables the Media Engagement Index
// data to be esude to override autoplay policies. An origin with a high MEI
@ -1659,7 +1645,7 @@ BASE_FEATURE(kAudioFocusLossSuspendMediaSession,
// session.
BASE_FEATURE(kHideIncognitoMediaMetadata,
"HideIncognitoMediaMetadata",
base::FEATURE_DISABLED_BY_DEFAULT);
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the internal Media Session logic without enabling the Media Session
// service.
@ -1693,7 +1679,7 @@ BASE_FEATURE(kCameraMicEffects,
// Controls whether system loopback audio can be Cast to audio-only Cast
// receivers, e.g. speakers.
// TODO(crbug.com/849335): Remove once launched.
// TODO(crbug.com/40579200): Remove once launched.
BASE_FEATURE(kCastLoopbackAudioToAudioReceivers,
"CastLoopbackAudioToAudioReceivers",
base::FEATURE_ENABLED_BY_DEFAULT);
@ -1702,10 +1688,10 @@ BASE_FEATURE(kCastLoopbackAudioToAudioReceivers,
// encoding.
//
// NOTE: currently only software AV1 encoding is supported.
// TODO(https://crbug.com/1383333): hardware AV1 encoding should be added.
// TODO(crbug.com/40246079): hardware AV1 encoding should be added.
BASE_FEATURE(kCastStreamingAv1,
"CastStreamingAv1",
base::FEATURE_ENABLED_BY_DEFAULT);
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls whether the new exponential bitrate calculate logic is used, or
// the legacy linear algorithm.
@ -1767,6 +1753,15 @@ BASE_FEATURE(kFFmpegAllowLists,
"FFmpegAllowLists",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_WIN)
// Enables audio offload when supported by endpoints.
BASE_FEATURE(kAudioOffload, "AudioOffload", base::FEATURE_DISABLED_BY_DEFAULT);
// The buffer time in milliseconds for audio offload.
const base::FeatureParam<double> kAudioOffloadBufferTimeMs{
&kAudioOffload, "buffer_time_ms", 50};
#endif
// Enables sending MediaLog to the log stream, which is useful for easier
// development by ensuring logs can be seen without a remote desktop session.
// Only affects builds when DCHECK is on for non-ERROR logs (ERROR logs are
@ -1802,6 +1797,13 @@ BASE_FEATURE(kD3D12VideoDecoder,
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_WIN) && defined(ARCH_CPU_ARM64)
// Allow MF-accelerated video encoding.
BASE_FEATURE(kMediaFoundationAcceleratedEncodeOnArm64,
"MediaFoundationAcceleratedEncodeOnArm64",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
// Convert SharedBitmap to SharedImage for media resources.
BASE_FEATURE(kMediaSharedBitmapToSharedImage,
"MediaSharedBitmapToSharedImage",
@ -1815,6 +1817,17 @@ bool IsChromeWideEchoCancellationEnabled() {
#endif
}
bool IsDedicatedMediaServiceThreadEnabled(gl::ANGLEImplementation impl) {
#if BUILDFLAG(IS_WIN)
// Only D3D11 device supports multi-threaded use.
if (impl != gl::ANGLEImplementation::kD3D11) {
return false;
}
#endif
return base::FeatureList::IsEnabled(kDedicatedMediaServiceThread);
}
int GetProcessingAudioFifoSize() {
#if BUILDFLAG(CHROME_WIDE_ECHO_CANCELLATION)
if (!IsChromeWideEchoCancellationEnabled()) {
@ -1851,8 +1864,21 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
}
bool IsMultiPlaneFormatForHardwareVideoEnabled() {
#if BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_LINUX) || \
BUILDFLAG(IS_CHROMEOS)
return true;
#else
return
base::FeatureList::IsEnabled(kUseMultiPlaneFormatForHardwareVideo);
#endif
}
bool IsMultiPlaneFormatForSoftwareVideoEnabled() {
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE)
return true;
#else
return base::FeatureList::IsEnabled(kUseMultiPlaneFormatForSoftwareVideo);
#endif
}
bool IsWritePixelsYUVEnabled() {

View file

@ -186,10 +186,21 @@ bool FFmpegGlue::OpenContext(bool is_local_file) {
// destruction path to avoid double frees.
open_called_ = true;
// We need to set the WAV decoder max size to what it had previously been set
// to. The auto-selectable max size ends up at 64k, which is larger than the
// read size from a MultiBufferDataSource, causing demuxer init to never
// complete.
AVDictionary* options = nullptr;
av_dict_set(&options, "max_size", "4096", 0);
// By passing nullptr for the filename (second parameter) we are telling
// FFmpeg to use the AVIO context we setup from the AVFormatContext structure.
const int ret =
avformat_open_input(&format_context_, nullptr, nullptr, nullptr);
avformat_open_input(&format_context_, nullptr, nullptr, &options);
if (options) {
av_dict_free(&options);
}
// If FFmpeg can't identify the file, read the first 8k and attempt to guess
// at the container type ourselves. This way we can track emergent formats.
@ -216,7 +227,7 @@ bool FFmpegGlue::OpenContext(bool is_local_file) {
return false;
}
// Rely on ffmpeg's parsing if we're able to succesfully open the file.
// Rely on ffmpeg's parsing if we're able to successfully open the file.
if (strcmp(format_context_->iformat->name, "mov,mp4,m4a,3gp,3g2,mj2") == 0)
container_ = container_names::MediaContainerName::kContainerMOV;
else if (strcmp(format_context_->iformat->name, "flac") == 0)

View file

@ -134,7 +134,7 @@ bool FFmpegVideoDecoder::IsCodecSupported(VideoCodec codec) {
}
FFmpegVideoDecoder::FFmpegVideoDecoder(MediaLog* media_log)
: media_log_(media_log) {
: media_log_(media_log), timestamp_map_(128) {
DVLOG(1) << __func__;
DETACH_FROM_SEQUENCE(sequence_checker_);
}
@ -213,10 +213,6 @@ int FFmpegVideoDecoder::GetVideoBuffer(struct AVCodecContext* codec_context,
frame->linesize[plane] = layout->planes()[plane].stride;
}
// This seems unsafe, given threaded decoding. However, `reordered_opaque` is
// also going away upstream, so we need a whole new mechanism either way.
frame->reordered_opaque = codec_context->reordered_opaque;
// This will be freed by `ReleaseVideoBufferImpl`.
auto* opaque = new OpaqueData(fb_priv, frame_pool_, data, allocation_size,
std::move(*layout));
@ -358,13 +354,15 @@ bool FFmpegVideoDecoder::FFmpegDecode(const DecoderBuffer& buffer) {
packet->size = 0;
} else {
packet->data = const_cast<uint8_t*>(buffer.data());
packet->size = buffer.data_size();
packet->size = buffer.size();
DCHECK(packet->data);
DCHECK_GT(packet->size, 0);
// Let FFmpeg handle presentation timestamp reordering.
codec_context_->reordered_opaque = buffer.timestamp().InMicroseconds();
const int64_t timestamp = buffer.timestamp().InMicroseconds();
const TimestampId timestamp_id = timestamp_id_generator_.GenerateNextId();
timestamp_map_.Put(std::make_pair(timestamp_id, timestamp));
packet->opaque = reinterpret_cast<void*>(timestamp_id.GetUnsafeValue());
}
FFmpegDecodingLoop::DecodeStatus decode_status = decoding_loop_->DecodePacket(
packet, base::BindRepeating(&FFmpegVideoDecoder::OnNewFrame,
@ -396,8 +394,9 @@ bool FFmpegVideoDecoder::OnNewFrame(AVFrame* frame) {
// TODO(fbarchard): Work around for FFmpeg http://crbug.com/27675
// The decoder is in a bad state and not decoding correctly.
// Checking for NULL avoids a crash in CopyPlane().
if (!frame->data[VideoFrame::kYPlane] || !frame->data[VideoFrame::kUPlane] ||
!frame->data[VideoFrame::kVPlane]) {
if (!frame->data[VideoFrame::Plane::kY] ||
!frame->data[VideoFrame::Plane::kU] ||
!frame->data[VideoFrame::Plane::kV]) {
DLOG(ERROR) << "Video frame was produced yet has invalid frame data.";
return false;
}
@ -423,7 +422,12 @@ bool FFmpegVideoDecoder::OnNewFrame(AVFrame* frame) {
}
gfx::Size natural_size = aspect_ratio.GetNaturalSize(visible_rect);
const auto pts = base::Microseconds(frame->reordered_opaque);
const auto ts_id = TimestampId(reinterpret_cast<size_t>(frame->opaque));
const auto ts_lookup = timestamp_map_.Get(ts_id);
if (ts_lookup == timestamp_map_.end()) {
return false;
}
const auto pts = base::Microseconds(std::get<1>(*ts_lookup));
auto video_frame = VideoFrame::WrapExternalDataWithLayout(
opaque->layout, visible_rect, natural_size, opaque->data, opaque->size,
pts);
@ -448,10 +452,12 @@ bool FFmpegVideoDecoder::OnNewFrame(AVFrame* frame) {
color_space = gfx::ColorSpace::CreateJpeg();
} else if (codec_context_->codec_id == AV_CODEC_ID_H264 &&
frame->colorspace == AVCOL_SPC_RGB &&
video_frame->format() == PIXEL_FORMAT_I420) {
VideoPixelFormatToChromaSampling(video_frame->format()) !=
VideoChromaSampling::k444) {
// Some H.264 videos contain a VUI that specifies a color matrix of GBR,
// when they are actually ordinary YUV. Only 4:2:0 formats are checked,
// because GBR is reasonable for 4:4:4 content. See crbug.com/1067377.
// when they are actually ordinary YUV. Default to BT.709 if the format is
// not 4:4:4 as GBR is reasonable for 4:4:4 content. See crbug.com/1067377
// and crbug.com/341266991.
color_space = gfx::ColorSpace::CreateREC709();
} else if (frame->color_primaries != AVCOL_PRI_UNSPECIFIED ||
frame->color_trc != AVCOL_TRC_UNSPECIFIED ||
@ -498,8 +504,10 @@ bool FFmpegVideoDecoder::ConfigureDecoder(const VideoDecoderConfig& config,
codec_context_->thread_count = GetFFmpegVideoDecoderThreadCount(config);
codec_context_->thread_type =
FF_THREAD_SLICE | (low_delay ? 0 : FF_THREAD_FRAME);
codec_context_->opaque = this;
codec_context_->get_buffer2 = GetVideoBufferImpl;
codec_context_->flags |= AV_CODEC_FLAG_COPY_OPAQUE;
if (base::FeatureList::IsEnabled(kFFmpegAllowLists)) {
// Note: FFmpeg will try to free this string, so we must duplicate it.

View file

@ -9,6 +9,7 @@
#include <optional>
#include <set>
#include <string>
#include <string_view>
#include <unordered_map>
#include <utility>
#include <vector>
@ -29,7 +30,6 @@
#include "base/numerics/byte_conversions.h"
#include "base/rand_util.h"
#include "base/ranges/algorithm.h"
#include "base/strings/string_piece.h"
#include "base/strings/stringprintf.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/single_thread_task_runner.h"
@ -413,8 +413,8 @@ class DnsHTTPAttempt : public DnsAttempt, public URLRequest::Delegate {
std::string url_string;
std::unordered_map<string, string> parameters;
std::string encoded_query;
base::Base64UrlEncode(base::StringPiece(query_->io_buffer()->data(),
query_->io_buffer()->size()),
base::Base64UrlEncode(std::string_view(query_->io_buffer()->data(),
query_->io_buffer()->size()),
base::Base64UrlEncodePolicy::OMIT_PADDING,
&encoded_query);
parameters.emplace("dns", encoded_query);
@ -814,7 +814,7 @@ class DnsTCPAttempt : public DnsAttempt {
if (static_cast<int>(query_size) != query_->io_buffer()->size())
return ERR_FAILED;
base::as_writable_bytes(length_buffer_->span())
.copy_from(base::numerics::U16ToBigEndian(query_size));
.copy_from(base::U16ToBigEndian(query_size));
buffer_ = base::MakeRefCounted<DrainableIOBuffer>(length_buffer_,
length_buffer_->size());
next_state_ = STATE_SEND_LENGTH;
@ -879,7 +879,7 @@ class DnsTCPAttempt : public DnsAttempt {
return OK;
}
response_length_ = base::numerics::U16FromBigEndian(
response_length_ = base::U16FromBigEndian(
base::as_bytes(length_buffer_->span().first<2u>()));
// Check if advertised response is too short. (Optimization only.)
if (response_length_ < query_->io_buffer()->size())
@ -1097,7 +1097,14 @@ class DnsOverHttpsProbeRunner : public DnsProbeRunner {
base::TimeTicks query_start_time,
int rv) {
bool success = false;
if (rv == OK && probe_stats && session_ && context_) {
while (probe_stats && session_ && context_) {
if (rv != OK) {
// The DoH probe queries don't go through the standard DnsAttempt path,
// so the ServerStats have not been updated yet.
context_->RecordServerFailure(doh_server_index, /*is_doh_server=*/true,
rv, session_.get());
break;
}
// Check that the response parses properly before considering it a
// success.
DCHECK_LT(attempt_number, probe_stats->probe_attempts.size());
@ -1116,8 +1123,6 @@ class DnsOverHttpsProbeRunner : public DnsProbeRunner {
for (const auto& result : results.value()) {
if (result->type() == HostResolverInternalResult::Type::kData &&
!result->AsData().endpoints().empty()) {
// The DoH probe queries don't go through the standard DnsAttempt
// path, so the ServerStats have not been updated yet.
context_->RecordServerSuccess(
doh_server_index, /*is_doh_server=*/true, session_.get());
context_->RecordRtt(doh_server_index, /*is_doh_server=*/true,
@ -1135,6 +1140,12 @@ class DnsOverHttpsProbeRunner : public DnsProbeRunner {
}
}
}
if (!success) {
context_->RecordServerFailure(
doh_server_index, /*is_doh_server=*/true,
/*rv=*/ERR_DNS_SECURE_PROBE_RECORD_INVALID, session_.get());
}
break;
}
base::UmaHistogramLongTimes(
@ -1164,8 +1175,7 @@ class DnsOverHttpsProbeRunner : public DnsProbeRunner {
// ResolveContext::NextClassicFallbackPeriod(). The first server to attempt on
// each query is given by ResolveContext::NextFirstServerIndex, and the order is
// round-robin afterwards. Each server is attempted DnsConfig::attempts times.
class DnsTransactionImpl : public DnsTransaction,
public base::SupportsWeakPtr<DnsTransactionImpl> {
class DnsTransactionImpl final : public DnsTransaction {
public:
DnsTransactionImpl(DnsSession* session,
std::string hostname,
@ -1236,8 +1246,8 @@ class DnsTransactionImpl : public DnsTransaction,
// they may interfere with this posted result.
ClearAttempts(result.attempt);
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE,
base::BindOnce(&DnsTransactionImpl::DoCallback, AsWeakPtr(), result));
FROM_HERE, base::BindOnce(&DnsTransactionImpl::DoCallback,
weak_ptr_factory_.GetWeakPtr(), result));
}
}
@ -1492,7 +1502,7 @@ class DnsTransactionImpl : public DnsTransaction,
const DnsConfig& config = session_->config();
DCHECK_LT(server_index, config.nameservers.size());
// TODO(https://crbug.com/1123197): Pass a non-null NetworkQualityEstimator.
// TODO(crbug.com/40146880): Pass a non-null NetworkQualityEstimator.
NetworkQualityEstimator* network_quality_estimator = nullptr;
std::unique_ptr<StreamSocket> socket =
@ -1773,6 +1783,8 @@ class DnsTransactionImpl : public DnsTransaction,
RequestPriority request_priority_ = DEFAULT_PRIORITY;
THREAD_CHECKER(thread_checker_);
base::WeakPtrFactory<DnsTransactionImpl> weak_ptr_factory_{this};
};
// ----------------------------------------------------------------------------

View file

@ -8,6 +8,7 @@
#include <iterator>
#include <memory>
#include <optional>
#include <string_view>
#include <utility>
#include <vector>
@ -103,6 +104,11 @@
#include "net/android/network_library.h"
#endif
#if BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS)
#include "net/device_bound_sessions/device_bound_session_registration_fetcher_param.h"
#include "net/device_bound_sessions/device_bound_session_service.h"
#endif // BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS)
namespace {
// These values are persisted to logs. Entries should not be renumbered and
@ -375,9 +381,6 @@ void URLRequestHttpJob::Start() {
IsSameSiteIgnoringWebSocketProtocol(request_initiator_site().value(),
request()->url()));
UMA_HISTOGRAM_BOOLEAN("Net.HttpJob.CanIncludeCookies",
ShouldAddCookieHeader());
CookieStore* cookie_store = request()->context()->cookie_store();
const CookieAccessDelegate* delegate =
cookie_store ? cookie_store->cookie_access_delegate() : nullptr;
@ -483,7 +486,7 @@ PrivacyMode URLRequestHttpJob::DeterminePrivacyMode() const {
// |allow_credentials_| implies LOAD_DO_NOT_SAVE_COOKIES.
DCHECK(request_->load_flags() & LOAD_DO_NOT_SAVE_COOKIES);
// TODO(https://crbug.com/775438): Client certs should always be
// TODO(crbug.com/40089326): Client certs should always be
// affirmatively omitted for these requests.
return request()->send_client_certs()
? PRIVACY_MODE_ENABLED
@ -527,6 +530,9 @@ void URLRequestHttpJob::NotifyHeadersComplete() {
}
ProcessStrictTransportSecurityHeader();
#if BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS)
ProcessDeviceBoundSessionsHeader();
#endif // BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS)
// Clear |set_cookie_access_result_list_| after any processing in case
// SaveCookiesAndNotifyHeadersComplete is called again.
@ -787,7 +793,7 @@ void URLRequestHttpJob::SetCookieHeaderAndStart(
size_t n_partitioned_cookies = 0;
// TODO(crbug.com/1031664): Reduce the number of times the cookie list
// TODO(crbug.com/40110557): Reduce the number of times the cookie list
// is iterated over. Get metrics for every cookie which is included.
for (const auto& c : maybe_included_cookies) {
bool request_is_secure = request_->url().SchemeIsCryptographic();
@ -893,8 +899,8 @@ void URLRequestHttpJob::AnnotateAndMoveUserBlockedCookies(
void URLRequestHttpJob::SaveCookiesAndNotifyHeadersComplete(int result) {
DCHECK(set_cookie_access_result_list_.empty());
// TODO(crbug.com/1186863): Turn this CHECK into DCHECK once the investigation
// is done.
// TODO(crbug.com/40753971): Turn this CHECK into DCHECK once the
// investigation is done.
CHECK_EQ(0, num_cookie_lines_left_);
// End of the call started in OnStartCompleted.
@ -957,7 +963,7 @@ void URLRequestHttpJob::SaveCookiesAndNotifyHeadersComplete(int result) {
// Set all cookies, without waiting for them to be set. Any subsequent
// read will see the combined result of all cookie operation.
const base::StringPiece name("Set-Cookie");
const std::string_view name("Set-Cookie");
std::string cookie_string;
size_t iter = 0;
@ -985,7 +991,8 @@ void URLRequestHttpJob::SaveCookiesAndNotifyHeadersComplete(int result) {
DCHECK(cookie_string.find('\n') == std::string::npos);
std::unique_ptr<CanonicalCookie> cookie = net::CanonicalCookie::Create(
request_->url(), cookie_string, base::Time::Now(), server_time,
request_->cookie_partition_key(), /*block_truncated=*/true,
request_->cookie_partition_key(),
/*block_truncated=*/true, net::CookieSourceType::kHTTP,
&returned_status);
std::optional<CanonicalCookie> cookie_to_return = std::nullopt;
@ -1059,6 +1066,20 @@ void URLRequestHttpJob::OnSetCookieResult(const CookieOptions& options,
NotifyHeadersComplete();
}
#if BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS)
void URLRequestHttpJob::ProcessDeviceBoundSessionsHeader() {
std::vector<DeviceBoundSessionRegistrationFetcherParam> params =
DeviceBoundSessionRegistrationFetcherParam::CreateIfValid(
request_->url(), GetResponseHeaders());
if (auto* service = request_->context()->device_bound_session_service()) {
for (auto& param : params) {
service->RegisterBoundSession(std::move(param),
request_->isolation_info());
}
}
}
#endif // BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS)
void URLRequestHttpJob::ProcessStrictTransportSecurityHeader() {
DCHECK(response_info_);
TransportSecurityState* security_state =
@ -1664,7 +1685,7 @@ void URLRequestHttpJob::RecordTimer() {
// connection makes use of 0-RTT. However, 0-RTT can affect how requests are
// bound to connections and which connections offer resumption. We look at
// all TLS 1.3 responses for an apples-to-apples comparison.
// TODO(crbug.com/641225): Remove these metrics after launching 0-RTT.
// TODO(crbug.com/41272059): Remove these metrics after launching 0-RTT.
if (transaction_ && transaction_->GetResponseInfo() &&
IsTLS13OverTCP(*transaction_->GetResponseInfo()) &&
HasGoogleHost(request()->url())) {
@ -1783,7 +1804,7 @@ void URLRequestHttpJob::RecordCompletionHistograms(CompletionCause reason) {
// Record metrics for TLS 1.3 to measure the impact of 0-RTT. See comment in
// RecordTimer().
//
// TODO(https://crbug.com/641225): Remove these metrics after launching
// TODO(crbug.com/41272059): Remove these metrics after launching
// 0-RTT.
if (IsTLS13OverTCP(*response_info_) && is_https_google) {
base::UmaHistogramTimes("Net.HttpJob.TotalTime.TLS13.Google", total_time);

File diff suppressed because it is too large Load diff

View file

@ -38,10 +38,12 @@ enable_library_widevine_cdm =
enable_widevine && enable_library_cdms && library_widevine_cdm_available
# Widevine CDM can be deployed as a component. Currently only supported on
# desktop platforms. The CDM can be bundled regardless whether
# it's a component. See below.
# desktop platforms. Not enabled for lacros (as it is changing to use the
# ash updated version). The CDM can be bundled regardless whether it's a
# component. See below.
enable_widevine_cdm_component =
enable_library_widevine_cdm && (is_win || is_mac || is_linux || is_chromeos)
enable_library_widevine_cdm &&
(is_win || is_mac || is_linux || is_chromeos_ash)
# Enable (Windows) Media Foundation Widevine CDM component.
declare_args() {

View file

@ -114,7 +114,7 @@ void DrawPixmap(x11::Connection* connection,
auto color_type = ColorTypeForVisual(visual);
if (color_type == kUnknown_SkColorType) {
// TODO(https://crbug.com/1066670): Add a fallback path in case any users
// TODO(crbug.com/40124639): Add a fallback path in case any users
// are running a server that uses visual types for which Skia doesn't have
// a corresponding color format.
return;
@ -294,7 +294,11 @@ bool GetRawBytesOfProperty(x11::Window window,
if (!response || !response->format) {
return false;
}
*out_data = response->value;
// SAFETY: The GetProperty response has a `format` which specified the number
// of bits per object in the `value` and `value_len` for the number of
// objects, so `value_len * format / 8` gives the number of bytes in `value`.
*out_data = UNSAFE_BUFFERS(x11::SizedRefCountedMemory::From(
response->value, response->value_len * response->format / 8u));
if (out_type) {
*out_type = response->type;
}