mirror of
https://github.com/Alex313031/thorium.git
synced 2025-01-09 19:37:30 -03:00
M126 stage 2 and a half stopped at incognito.svg
This commit is contained in:
parent
d393f1875d
commit
c1b6381366
12 changed files with 1506 additions and 151 deletions
|
@ -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>
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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};
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
|
|
@ -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);
|
||||
|
|
1209
src/third_party/blink/renderer/modules/webaudio/audio_context.cc
vendored
Normal file
1209
src/third_party/blink/renderer/modules/webaudio/audio_context.cc
vendored
Normal file
File diff suppressed because it is too large
Load diff
8
src/third_party/widevine/cdm/widevine.gni
vendored
8
src/third_party/widevine/cdm/widevine.gni
vendored
|
@ -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() {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue