From 8dab71f659618a2baa62a0ec095568d42914b0cb Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Wed, 14 Jan 2009 19:54:37 +0000 Subject: [PATCH] libcef: Update due to underlying chromium changes. - Canvas classes moved from gfx namespace to skia namespace. - Include files moved from WebKit/port to third_party/WebKit. - Add IsMediaPlayerAvailable() webkit_glue function. - WebWidgetDelegate::GetContainingWindow() changed to WebWidgetDelegate::GetContainingView(). - Changed HCURSOR to WebCursor and HWND to gfx::NativeWindow. - WebPluginInfo 'file' member changed to 'path'. - Use base::LazyInstance for static object in BrowserPluginInstance (should be done at some point for BrowserPluginLib and BrowserPluginList as well). - BrowserPluginStream::Open() adds additional 'request_is_seekable' parameter. - Add PLUGIN_QUIRK_PATCH_SETCURSOR support to BrowserWebPluginDelegateImpl. git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@6 5089003a-bbd8-11dd-ad1f-f1f9622dbc98 --- CHROMIUM_BUILD_COMPATIBILITY.txt | 1 + cef.sln | 153 +++++++++++------- libcef/browser_impl_win.cc | 2 +- libcef/browser_webkit_glue.cc | 11 +- libcef/browser_webkit_glue_win.cc | 78 +++++---- libcef/browser_webview_delegate.cc | 10 +- libcef/browser_webview_delegate.h | 12 +- libcef/browser_webview_delegate_win.cc | 22 +-- libcef/libcef.vsprops | 2 +- libcef/libcef_webkit_includes.vsprops | 2 +- libcef/plugins/browser_plugin_instance.cc | 26 +-- libcef/plugins/browser_plugin_instance.h | 6 - libcef/plugins/browser_plugin_lib.cc | 6 +- libcef/plugins/browser_plugin_list.cc | 3 +- libcef/plugins/browser_plugin_stream.cc | 5 +- libcef/plugins/browser_plugin_stream.h | 5 +- libcef/plugins/browser_plugin_stream_url.cc | 4 +- libcef/plugins/browser_plugin_stream_url.h | 5 +- .../plugins/browser_plugin_string_stream.cc | 2 +- .../browser_webplugin_delegate_impl.cc | 95 ++++++++--- .../plugins/browser_webplugin_delegate_impl.h | 27 ++-- libcef/printing/win_printing_context.cc | 2 +- libcef/webwidget_host.cc | 10 +- libcef/webwidget_host.h | 2 +- 24 files changed, 293 insertions(+), 198 deletions(-) diff --git a/CHROMIUM_BUILD_COMPATIBILITY.txt b/CHROMIUM_BUILD_COMPATIBILITY.txt index dc24217ba..0c90f7898 100644 --- a/CHROMIUM_BUILD_COMPATIBILITY.txt +++ b/CHROMIUM_BUILD_COMPATIBILITY.txt @@ -11,3 +11,4 @@ Date | CEF Revision | Chromium Revision 2008-12-05 | /trunk@3 | /trunk@6430 2008-12-13 | /trunk@4 | /trunk@6968 2008-12-13 | /trunk@5 | /trunk@6975 +2009-01-14 | /trunk@6 | /trunk@8029 diff --git a/cef.sln b/cef.sln index cbbe26489..4a0519d7c 100644 --- a/cef.sln +++ b/cef.sln @@ -12,11 +12,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebCore", "..\webkit\build\ Release.AspNetCompiler.Debug = "False" EndProjectSection ProjectSection(ProjectDependencies) = postProject - {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673} - {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} - {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} - {4BD929D4-494B-4EE8-91F6-FD0277A51D2B} = {4BD929D4-494B-4EE8-91F6-FD0277A51D2B} {31D88CBF-DC28-47A8-8838-BF81D528EE74} = {31D88CBF-DC28-47A8-8838-BF81D528EE74} + {4BD929D4-494B-4EE8-91F6-FD0277A51D2B} = {4BD929D4-494B-4EE8-91F6-FD0277A51D2B} + {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} + {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} + {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Port", "..\webkit\build\port\port.vcproj", "{5597AD47-3494-4750-A235-4F9C2F864700}" @@ -25,8 +25,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Port", "..\webkit\build\por Release.AspNetCompiler.Debug = "False" EndProjectSection ProjectSection(ProjectDependencies) = postProject - {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673} + {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Glue", "..\webkit\build\glue\glue.vcproj", "{C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09}" @@ -36,9 +36,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Glue", "..\webkit\build\glu EndProjectSection ProjectSection(ProjectDependencies) = postProject {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673} - {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E} - {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} + {0B469837-3D46-484A-AFB3-C5A6C68730B9} = {0B469837-3D46-484A-AFB3-C5A6C68730B9} {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} + {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} + {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "skia", "..\skia\skia.vcproj", "{CD9CA56E-4E94-444C-87D4-58CA1E6F300D}" @@ -134,8 +135,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libxslt", "..\third_party\l Release.AspNetCompiler.Debug = "False" EndProjectSection ProjectSection(ProjectDependencies) = postProject - {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} = {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} {4BD929D4-494B-4EE8-91F6-FD0277A51D2B} = {4BD929D4-494B-4EE8-91F6-FD0277A51D2B} + {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} = {F9810DE8-CBC3-4605-A7B1-ECA2D5292FD7} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "V8Bindings", "..\webkit\build\V8Bindings\V8Bindings.vcproj", "{625A8F11-2B4E-45B4-BD99-C6D629C606C0}" @@ -144,8 +145,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "V8Bindings", "..\webkit\bui Release.AspNetCompiler.Debug = "False" EndProjectSection ProjectSection(ProjectDependencies) = postProject - {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673} {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} + {2E2D3301-2EC4-4C0F-B889-87073B30F673} = {2E2D3301-2EC4-4C0F-B889-87073B30F673} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bzip2", "..\third_party\bzip2\bzip2.vcproj", "{2A70CBF0-847E-4E3A-B926-542A656DC7FE}" @@ -160,28 +161,29 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcef", "libcef\libcef.vcp Release.AspNetCompiler.Debug = "False" EndProjectSection ProjectSection(ProjectDependencies) = postProject - {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} - {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} - {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51} - {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C} - {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} - {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} - {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD} - {C0334F9A-1168-4101-9DD8-C30FB252D435} = {C0334F9A-1168-4101-9DD8-C30FB252D435} - {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {B55CA863-B374-4BAF-95AC-539E4FA4C90C} - {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6} - {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551} - {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308} - {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} - {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D} - {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0} - {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6} - {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700} - {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} - {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243} - {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE} - {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601} {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} + {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601} + {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE} + {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243} + {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} = {49909552-0B0C-4C14-8CF6-DB8A2ADE0934} + {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700} + {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6} + {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0} + {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D} + {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} + {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308} + {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551} + {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6} + {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {B55CA863-B374-4BAF-95AC-539E4FA4C90C} + {C0334F9A-1168-4101-9DD8-C30FB252D435} = {C0334F9A-1168-4101-9DD8-C30FB252D435} + {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD} + {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} + {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} + {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C} + {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51} + {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} + {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} = {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165} EndProjectSection EndProject @@ -209,8 +211,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "activex_shim", "..\webkit\a Release.AspNetCompiler.Debug = "False" EndProjectSection ProjectSection(ProjectDependencies) = postProject - {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C} {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308} + {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net", "..\net\build\net.vcproj", "{326E9795-E760-410A-B69A-3F79DB3F5243}" @@ -219,6 +221,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net", "..\net\build\net.vcp Release.AspNetCompiler.Debug = "False" EndProjectSection ProjectSection(ProjectDependencies) = postProject + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} = {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} {E13045CD-7E1F-4A41-9B18-8D288B2E7B41} = {E13045CD-7E1F-4A41-9B18-8D288B2E7B41} EndProjectSection EndProject @@ -267,8 +270,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "default_plugin", "..\webkit Release.AspNetCompiler.Debug = "False" EndProjectSection ProjectSection(ProjectDependencies) = postProject - {31D88CBF-DC28-47A8-8838-BF81D528EE74} = {31D88CBF-DC28-47A8-8838-BF81D528EE74} {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E} + {31D88CBF-DC28-47A8-8838-BF81D528EE74} = {31D88CBF-DC28-47A8-8838-BF81D528EE74} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JavaScriptCore_pcre", "..\webkit\build\JavaScriptCore\JavaScriptCore_pcre.vcproj", "{49909552-0B0C-4C14-8CF6-DB8A2ADE0934}" @@ -316,9 +319,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tld_cleanup", "..\net\build Release.AspNetCompiler.Debug = "False" EndProjectSection ProjectSection(ProjectDependencies) = postProject - {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165} - {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308} {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C} + {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308} + {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "v8_mksnapshot", "..\v8\tools\visual_studio\v8_mksnapshot.vcproj", "{865575D0-37E2-405E-8CBA-5F6C485B5A26}" @@ -363,33 +366,33 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cefclient", "tests\cefclien Release.AspNetCompiler.Debug = "False" EndProjectSection ProjectSection(ProjectDependencies) = postProject - {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142} - {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} - {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0} - {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D} - {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E} - {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD} - {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700} - {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} - {FA39524D-3067-4141-888D-28A86C66F2B9} = {FA39524D-3067-4141-888D-28A86C66F2B9} - {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} - {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179} - {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {B55CA863-B374-4BAF-95AC-539E4FA4C90C} - {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} - {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} - {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165} - {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601} - {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} - {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6} - {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6} - {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308} - {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243} - {C0334F9A-1168-4101-9DD8-C30FB252D435} = {C0334F9A-1168-4101-9DD8-C30FB252D435} - {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51} - {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C} - {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} - {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551} {2A70CBF0-847E-4E3A-B926-542A656DC7FE} = {2A70CBF0-847E-4E3A-B926-542A656DC7FE} + {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {A508ADD3-CECE-4E0F-8448-2F5E454DF551} + {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} = {FC0E1FD0-5DD7-4041-A1C9-CD3C376E4EED} + {EF5E94AB-B646-4E5B-A058-52EF07B8351C} = {EF5E94AB-B646-4E5B-A058-52EF07B8351C} + {F4F4BCAA-EA59-445C-A119-3E6C29647A51} = {F4F4BCAA-EA59-445C-A119-3E6C29647A51} + {C0334F9A-1168-4101-9DD8-C30FB252D435} = {C0334F9A-1168-4101-9DD8-C30FB252D435} + {326E9795-E760-410A-B69A-3F79DB3F5243} = {326E9795-E760-410A-B69A-3F79DB3F5243} + {8C27D792-2648-4F5E-9ED0-374276327308} = {8C27D792-2648-4F5E-9ED0-374276327308} + {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6} + {5916D37D-8C97-424F-A904-74E52594C2D6} = {5916D37D-8C97-424F-A904-74E52594C2D6} + {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {1C16337B-ACF3-4D03-AA90-851C5B5EADA6} + {238CE175-76CE-4A25-A676-69D115885601} = {238CE175-76CE-4A25-A676-69D115885601} + {1832A374-8A74-4F9E-B536-69A699B3E165} = {1832A374-8A74-4F9E-B536-69A699B3E165} + {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} + {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} = {C66B126D-0ECE-4CA2-B6DC-FA780AFBBF09} + {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {B55CA863-B374-4BAF-95AC-539E4FA4C90C} + {21E22961-22BF-4493-BD3A-868F93DA5179} = {21E22961-22BF-4493-BD3A-868F93DA5179} + {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} + {FA39524D-3067-4141-888D-28A86C66F2B9} = {FA39524D-3067-4141-888D-28A86C66F2B9} + {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} + {5597AD47-3494-4750-A235-4F9C2F864700} = {5597AD47-3494-4750-A235-4F9C2F864700} + {C564F145-9172-42C3-BFCB-6014CA97DBCD} = {C564F145-9172-42C3-BFCB-6014CA97DBCD} + {60B43839-95E6-4526-A661-209F16335E0E} = {60B43839-95E6-4526-A661-209F16335E0E} + {7100F41F-868D-4E99-80A2-AF8E6574749D} = {7100F41F-868D-4E99-80A2-AF8E6574749D} + {625A8F11-2B4E-45B4-BD99-C6D629C606C0} = {625A8F11-2B4E-45B4-BD99-C6D629C606C0} + {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} = {8423AF0D-4B88-4EBF-94E1-E4D00D00E21C} + {EC8B7909-62AF-470D-A75D-E1D89C837142} = {EC8B7909-62AF-470D-A75D-E1D89C837142} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icudt", "..\third_party\icu38\build\icudt.vcproj", "{A0D94973-D355-47A5-A1E2-3456F321F010}" @@ -398,6 +401,18 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icudt", "..\third_party\icu Release.AspNetCompiler.Debug = "False" EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net_resources", "..\net\build\net_resources.vcproj", "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "webkit_resources", "..\webkit\build\webkit_resources\webkit_resources.vcproj", "{0B469837-3D46-484A-AFB3-C5A6C68730B9}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Mixed Platforms = Debug|Mixed Platforms @@ -701,6 +716,22 @@ Global {A0D94973-D355-47A5-A1E2-3456F321F010}.Release|Mixed Platforms.Build.0 = Release|Win32 {A0D94973-D355-47A5-A1E2-3456F321F010}.Release|Win32.ActiveCfg = Release|Win32 {A0D94973-D355-47A5-A1E2-3456F321F010}.Release|Win32.Build.0 = Release|Win32 + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Win32.ActiveCfg = Debug|Win32 + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Win32.Build.0 = Debug|Win32 + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Mixed Platforms.Build.0 = Release|Win32 + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Win32.ActiveCfg = Release|Win32 + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Win32.Build.0 = Release|Win32 + {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Debug|Win32.ActiveCfg = Debug|Win32 + {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Debug|Win32.Build.0 = Debug|Win32 + {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Release|Mixed Platforms.Build.0 = Release|Win32 + {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Release|Win32.ActiveCfg = Release|Win32 + {0B469837-3D46-484A-AFB3-C5A6C68730B9}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -717,6 +748,7 @@ Global {5916D37D-8C97-424F-A904-74E52594C2D6} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E} {2F7EDFA2-EE27-4D83-8454-9EFBD5779203} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E} {60B43839-95E6-4526-A661-209F16335E0E} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E} + {0B469837-3D46-484A-AFB3-C5A6C68730B9} = {CB43561E-A6F8-49E2-96A2-3F2BA1FFF21E} {6EAD4A4B-2BBC-4974-8E45-BB5C16CC2AC9} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA} {CD9CA56E-4E94-444C-87D4-58CA1E6F300D} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA} {1AFC1EC3-24FA-4260-B099-76319EC9977A} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA} @@ -733,6 +765,7 @@ Global {1832A374-8A74-4F9E-B536-69A699B3E165} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA} {A508ADD3-CECE-4E0F-8448-2F5E454DF551} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA} {F54ABC59-5C00-414A-A9BA-BAF26D1699F0} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA} + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} = {EF78C1F9-AA17-4CA5-B6CB-39B37A73A3DA} {8C27D792-2648-4F5E-9ED0-374276327308} = {1AFC1EC3-24FA-4260-B099-76319EC9977A} {A0D94973-D355-47A5-A1E2-3456F321F010} = {1AFC1EC3-24FA-4260-B099-76319EC9977A} {B55CA863-B374-4BAF-95AC-539E4FA4C90C} = {873D095E-150E-4262-8C41-2D8ED02F0F57} diff --git a/libcef/browser_impl_win.cc b/libcef/browser_impl_win.cc index 02eb49b5b..27cc13a2d 100644 --- a/libcef/browser_impl_win.cc +++ b/libcef/browser_impl_win.cc @@ -606,7 +606,7 @@ void CefBrowserImpl::UIT_PrintPage(int page_number, WebFrame* frame, DCHECK_NE(saved_state, 0); // 100% GDI based. - gfx::VectorCanvas canvas(hDC, (int)ceil(dest_size_x), (int)ceil(dest_size_y)); + skia::VectorCanvas canvas(hDC, (int)ceil(dest_size_x), (int)ceil(dest_size_y)); canvas.translate(SkDoubleToScalar(dest_margin), SkDoubleToScalar(dest_margin)); canvas.scale(SkDoubleToScalar((dest_size_x - dest_margin * 2) / src_size_x), diff --git a/libcef/browser_webkit_glue.cc b/libcef/browser_webkit_glue.cc index 394c46972..9b3cb3353 100644 --- a/libcef/browser_webkit_glue.cc +++ b/libcef/browser_webkit_glue.cc @@ -24,11 +24,16 @@ MSVC_POP_WARNING(); #include "webkit/glue/glue_util.h" #include "webkit/glue/webframe.h" #include "webkit/glue/webkit_glue.h" -#include "webkit/glue/webkit_resources.h" +// Generated by GRIT +#include "webkit_resources.h" namespace webkit_glue { +bool IsMediaPlayerAvailable() { + return true; +} + void PrefetchDns(const std::string& hostname) {} void PrecacheUrl(const char16* url, int url_length) {} @@ -127,6 +132,10 @@ bool SpellCheckWord(const wchar_t* word, int word_len, return true; } +ScreenInfo GetScreenInfo(gfx::NativeView window) { + return GetScreenInfoHelper(window); +} + bool IsPluginRunningInRendererProcess() { return true; } diff --git a/libcef/browser_webkit_glue_win.cc b/libcef/browser_webkit_glue_win.cc index 958ceb879..adca1e129 100644 --- a/libcef/browser_webkit_glue_win.cc +++ b/libcef/browser_webkit_glue_win.cc @@ -59,49 +59,45 @@ bool DownloadUrl(const std::string& url, HWND caller_window) { return false; } -ScreenInfo GetScreenInfo(gfx::NativeView window) { - return GetScreenInfoHelper(window); -} - void CaptureWebViewBitmap(HWND mainWnd, WebView* webview, HBITMAP& bitmap, SIZE& size) { - gfx::Size webSize = webview->GetSize(); - size.cx = webSize.width(); - size.cy = webSize.height(); - - gfx::PlatformCanvasWin canvas(size.cx, size.cy, true); - canvas.drawARGB(255, 255, 255, 255, SkPorterDuff::kSrc_Mode); - PlatformContextSkia context(&canvas); - gfx::Rect rect(size.cx, size.cy); - webview->Layout(); - webview->Paint(&canvas, rect); + gfx::Size webSize = webview->GetSize(); + size.cx = webSize.width(); + size.cy = webSize.height(); + + skia::PlatformCanvasWin canvas(size.cx, size.cy, true); + canvas.drawARGB(255, 255, 255, 255, SkPorterDuff::kSrc_Mode); + PlatformContextSkia context(&canvas); + gfx::Rect rect(size.cx, size.cy); + webview->Layout(); + webview->Paint(&canvas, rect); - HDC hRefDC = GetDC(mainWnd); - HDC hDC = CreateCompatibleDC(hRefDC); - bitmap = CreateCompatibleBitmap(hRefDC, size.cx, size.cy); - DCHECK(bitmap != NULL); - HBITMAP hOldBmp = (HBITMAP)SelectObject(hDC, bitmap); - - // Create a BMP v4 header that we can serialize. - BITMAPV4HEADER bitmap_header; - gfx::CreateBitmapV4Header(size.cx, size.cy, &bitmap_header); - const SkBitmap& src_bmp = canvas.getDevice()->accessBitmap(true); - SkAutoLockPixels src_lock(src_bmp); + HDC hRefDC = GetDC(mainWnd); + HDC hDC = CreateCompatibleDC(hRefDC); + bitmap = CreateCompatibleBitmap(hRefDC, size.cx, size.cy); + DCHECK(bitmap != NULL); + HBITMAP hOldBmp = (HBITMAP)SelectObject(hDC, bitmap); + + // Create a BMP v4 header that we can serialize. + BITMAPV4HEADER bitmap_header; + gfx::CreateBitmapV4Header(size.cx, size.cy, &bitmap_header); + const SkBitmap& src_bmp = canvas.getDevice()->accessBitmap(true); + SkAutoLockPixels src_lock(src_bmp); int retval = StretchDIBits(hDC, - 0, - 0, - size.cx, size.cy, - 0, 0, - size.cx, size.cy, - src_bmp.getPixels(), - reinterpret_cast(&bitmap_header), - DIB_RGB_COLORS, - SRCCOPY); - DCHECK(retval != GDI_ERROR); + 0, + 0, + size.cx, size.cy, + 0, 0, + size.cx, size.cy, + src_bmp.getPixels(), + reinterpret_cast(&bitmap_header), + DIB_RGB_COLORS, + SRCCOPY); + DCHECK(retval != GDI_ERROR); - SelectObject(hDC, hOldBmp); - DeleteDC(hDC); - ReleaseDC(mainWnd, hRefDC); + SelectObject(hDC, hOldBmp); + DeleteDC(hDC); + ReleaseDC(mainWnd, hRefDC); } @@ -216,10 +212,10 @@ static BOOL BmpSaveFile(LPCTSTR pszFile, PBITMAPINFO pbi, HBITMAP hBMP, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); if (hf == INVALID_HANDLE_VALUE) { - // Could not create the bitmap file + // Could not create the bitmap file NOTREACHED(); goto end; - } + } hdr.bfType = 0x4d42; // 0x42 = "B", 0x4d = "M" @@ -256,7 +252,7 @@ static BOOL BmpSaveFile(LPCTSTR pszFile, PBITMAPINFO pbi, HBITMAP hBMP, dwTotal = cb = pbih->biSizeImage; hp = lpBits; if (!WriteFile(hf, (LPSTR) hp, (int) cb, (LPDWORD) &dwTmp,NULL)) { - // Could not write bitmap data to file + // Could not write bitmap data to file NOTREACHED(); goto end; } diff --git a/libcef/browser_webview_delegate.cc b/libcef/browser_webview_delegate.cc index 7e53952cc..ae74670fe 100644 --- a/libcef/browser_webview_delegate.cc +++ b/libcef/browser_webview_delegate.cc @@ -47,20 +47,20 @@ int next_page_id_ = 1; // WebViewDelegate ----------------------------------------------------------- WebView* BrowserWebViewDelegate::CreateWebView(WebView* webview, - bool user_gesture) { + bool user_gesture) { CefRefPtr browser = browser_->UIT_CreatePopupWindow(std::wstring()); return browser.get() ? browser->UIT_GetWebView() : NULL; } WebWidget* BrowserWebViewDelegate::CreatePopupWidget(WebView* webview, - bool focus_on_show) { + bool activatable) { return browser_->UIT_CreatePopupWidget(webview); } void BrowserWebViewDelegate::OpenURL(WebView* webview, const GURL& url, - const GURL& referrer, - WindowOpenDisposition disposition) { + const GURL& referrer, + WindowOpenDisposition disposition) { DCHECK_NE(disposition, CURRENT_TAB); // No code for this if (disposition == SUPPRESS_OPEN) return; @@ -468,7 +468,7 @@ void BrowserWebViewDelegate::SetUserStyleSheetLocation(const GURL& location) { // WebWidgetDelegate --------------------------------------------------------- -gfx::NativeView BrowserWebViewDelegate::GetContainingWindow(WebWidget* webwidget) { +gfx::NativeView BrowserWebViewDelegate::GetContainingView(WebWidget* webwidget) { if (WebWidgetHost* host = GetHostForWidget(webwidget)) return host->window_handle(); diff --git a/libcef/browser_webview_delegate.h b/libcef/browser_webview_delegate.h index 75cead084..a3ef4e7af 100644 --- a/libcef/browser_webview_delegate.h +++ b/libcef/browser_webview_delegate.h @@ -20,6 +20,7 @@ #include "base/basictypes.h" #include "base/ref_counted.h" +#include "webkit/glue/webcursor.h" #include "webkit/glue/webview_delegate.h" #include "webkit/glue/webwidget_delegate.h" #if defined(OS_WIN) @@ -42,9 +43,7 @@ class BrowserWebViewDelegate : public base::RefCounted, top_loading_frame_(NULL), page_id_(-1), last_page_id_updated_(-1) -#if defined(OS_WIN) - , custom_cursor_(NULL) -#elif defined(OS_LINUX) +#if defined(OS_LINUX) , cursor_type_(GDK_X_CURSOR) #endif { @@ -53,7 +52,7 @@ class BrowserWebViewDelegate : public base::RefCounted, // WebViewDelegate virtual WebView* CreateWebView(WebView* webview, bool user_gesture); - virtual WebWidget* CreatePopupWidget(WebView* webview, bool focus_on_show); + virtual WebWidget* CreatePopupWidget(WebView* webview, bool activatable); virtual WebPluginDelegate* CreatePluginDelegate( WebView* webview, const GURL& url, @@ -179,7 +178,7 @@ class BrowserWebViewDelegate : public base::RefCounted, virtual int GetHistoryForwardListCount(); // WebWidgetDelegate - virtual gfx::NativeView GetContainingWindow(WebWidget* webwidget); + virtual gfx::NativeView GetContainingView(WebWidget* webwidget); virtual void DidInvalidateRect(WebWidget* webwidget, const gfx::Rect& rect); virtual void DidScrollRect(WebWidget* webwidget, int dx, int dy, const gfx::Rect& clip_rect); @@ -259,9 +258,8 @@ class BrowserWebViewDelegate : public base::RefCounted, int page_id_; int last_page_id_updated_; + WebCursor current_cursor_; #if defined(OS_WIN) - HCURSOR custom_cursor_; - // Classes needed by drag and drop. scoped_refptr drag_delegate_; scoped_refptr drop_delegate_; diff --git a/libcef/browser_webview_delegate_win.cc b/libcef/browser_webview_delegate_win.cc index 1610bbd07..bd3cf945c 100644 --- a/libcef/browser_webview_delegate_win.cc +++ b/libcef/browser_webview_delegate_win.cc @@ -41,8 +41,6 @@ // WebViewDelegate ----------------------------------------------------------- BrowserWebViewDelegate::~BrowserWebViewDelegate() { - if (custom_cursor_) - DestroyIcon(custom_cursor_); RevokeDragDrop(browser_->UIT_GetWebViewWndHandle()); } @@ -52,7 +50,7 @@ WebPluginDelegate* BrowserWebViewDelegate::CreatePluginDelegate( const std::string& mime_type, const std::string& clsid, std::string* actual_mime_type) { - HWND hwnd = GetContainingWindow(webview); + HWND hwnd = GetContainingView(webview); if (!hwnd) return NULL; @@ -64,9 +62,9 @@ WebPluginDelegate* BrowserWebViewDelegate::CreatePluginDelegate( allow_wildcard, &info, actual_mime_type)) { if (actual_mime_type && !actual_mime_type->empty()) - return WebPluginDelegateImpl::Create(info.file, *actual_mime_type, hwnd); + return WebPluginDelegateImpl::Create(info.path, *actual_mime_type, hwnd); else - return WebPluginDelegateImpl::Create(info.file, mime_type, hwnd); + return WebPluginDelegateImpl::Create(info.path, mime_type, hwnd); } // second, look for plugins using the embedded plugin list @@ -107,17 +105,9 @@ void BrowserWebViewDelegate::CloseWidgetSoon(WebWidget* webwidget) { void BrowserWebViewDelegate::SetCursor(WebWidget* webwidget, const WebCursor& cursor) { if (WebWidgetHost* host = GetHostForWidget(webwidget)) { - if (custom_cursor_) { - DestroyIcon(custom_cursor_); - custom_cursor_ = NULL; - } - if (cursor.IsCustom()) { - custom_cursor_ = cursor.GetCustomCursor(); - host->SetCursor(custom_cursor_); - } else { - HINSTANCE mod_handle = GetModuleHandle(NULL); - host->SetCursor(cursor.GetCursor(mod_handle)); - } + current_cursor_ = cursor; + HINSTANCE mod_handle = GetModuleHandle(NULL); + host->SetCursor(current_cursor_.GetCursor(mod_handle)); } } diff --git a/libcef/libcef.vsprops b/libcef/libcef.vsprops index 3126eb186..049a2a967 100644 --- a/libcef/libcef.vsprops +++ b/libcef/libcef.vsprops @@ -7,7 +7,7 @@ > diff --git a/libcef/plugins/browser_plugin_instance.cc b/libcef/plugins/browser_plugin_instance.cc index a1a0562c8..a0232cec8 100644 --- a/libcef/plugins/browser_plugin_instance.cc +++ b/libcef/plugins/browser_plugin_instance.cc @@ -13,20 +13,23 @@ #endif #include "base/file_util.h" +#include "base/lazy_instance.h" #include "base/message_loop.h" #include "base/string_util.h" -#include "base/thread_local_storage.h" +#include "base/thread_local.h" #include "webkit/glue/glue_util.h" #include "webkit/glue/webplugin.h" #include "webkit/glue/webkit_glue.h" #include "webkit/glue/plugins/plugin_host.h" #include "net/base/escape.h" -namespace NPAPI -{ +namespace NPAPI { -// TODO(evanm): don't rely on static initialization. -ThreadLocalStorage::Slot BrowserPluginInstance::plugin_instance_tls_index_; +// Use TLS to store the PluginInstance object during its creation. We need to +// pass this instance to the service manager (MozillaExtensionApi) created as a +// result of NPN_GetValue in the context of NP_Initialize. +static base::LazyInstance > + lazy_tls(base::LINKER_INITIALIZED); BrowserPluginInstance::BrowserPluginInstance(BrowserPluginLib *plugin, const std::string &mime_type) @@ -287,7 +290,7 @@ void BrowserPluginInstance::NPP_StreamAsFile(NPStream *stream, // Creating a temporary FilePath instance on the stack as the explicit // FilePath constructor with StringType as an argument causes a compiler // error when invoked via vector push back. - FilePath file_name(UTF8ToWide(fname)); + FilePath file_name = FilePath::FromWStringHack(UTF8ToWide(fname)); files_created_.push_back(file_name); } @@ -373,7 +376,7 @@ void BrowserPluginInstance::DidReceiveManualResponse(const std::string& url, plugin_data_stream_ = CreateStream(-1, url, mime_type, false, NULL); plugin_data_stream_->DidReceiveResponse(mime_type, headers, expected_length, - last_modified, &cancel); + last_modified, true, &cancel); AddStream(plugin_data_stream_.get()); } @@ -427,16 +430,13 @@ void BrowserPluginInstance::OnPluginThreadAsyncCall(void (*func)(void *), BrowserPluginInstance* BrowserPluginInstance::SetInitializingInstance( BrowserPluginInstance* instance) { - BrowserPluginInstance* old_instance = - static_cast(plugin_instance_tls_index_.Get()); - plugin_instance_tls_index_.Set(instance); + BrowserPluginInstance* old_instance = lazy_tls.Pointer()->Get(); + lazy_tls.Pointer()->Set(instance); return old_instance; } BrowserPluginInstance* BrowserPluginInstance::GetInitializingInstance() { - BrowserPluginInstance* instance = - static_cast(plugin_instance_tls_index_.Get()); - return instance; + return lazy_tls.Pointer()->Get(); } NPError BrowserPluginInstance::GetServiceManager(void** service_manager) { diff --git a/libcef/plugins/browser_plugin_instance.h b/libcef/plugins/browser_plugin_instance.h index 2ad403e1d..05844d957 100644 --- a/libcef/plugins/browser_plugin_instance.h +++ b/libcef/plugins/browser_plugin_instance.h @@ -17,7 +17,6 @@ #include "base/file_path.h" #include "base/ref_counted.h" #include "base/scoped_ptr.h" -#include "base/thread_local_storage.h" #include "webkit/glue/plugins/nphostapi.h" #include "googleurl/src/gurl.h" #include "third_party/npapi/bindings/npapi.h" @@ -237,11 +236,6 @@ class BrowserPluginInstance : public base::RefCountedThreadSafe mozilla_extenstions_; #endif MessageLoop* message_loop_; - // Using TLS to store BrowserPluginInstance object during its creation. - // We need to pass this instance to the service manager - // (MozillaExtensionApi) created as a result of NPN_GetValue - // in the context of NP_Initialize. - static ThreadLocalStorage::Slot plugin_instance_tls_index_; scoped_refptr plugin_data_stream_; GURL instance_url_; diff --git a/libcef/plugins/browser_plugin_lib.cc b/libcef/plugins/browser_plugin_lib.cc index e39ef6e7d..44fe37e02 100644 --- a/libcef/plugins/browser_plugin_lib.cc +++ b/libcef/plugins/browser_plugin_lib.cc @@ -48,7 +48,7 @@ BrowserPluginLib::BrowserPluginLib(WebPluginInfo* info, instance_count_(0) { memset((void*)&plugin_funcs_, 0, sizeof(plugin_funcs_)); - (*loaded_libs_)[info->file] = this; + (*loaded_libs_)[info->path.BaseName().value()] = this; } BrowserPluginLib::~BrowserPluginLib() { @@ -121,7 +121,7 @@ void BrowserPluginLib::CloseInstance() { if (instance_count_ == 0) { NP_Shutdown(); initialized_ = false; - loaded_libs_->erase(web_plugin_info_->file); + loaded_libs_->erase(web_plugin_info_->path.BaseName().value()); if (loaded_libs_->empty()) { delete loaded_libs_; loaded_libs_ = NULL; @@ -145,7 +145,7 @@ WebPluginInfo* BrowserPluginLib::CreateWebPluginInfo(const CefPluginVersionInfo& info->name = plugin_info.product_name; info->desc = plugin_info.description; info->version = plugin_info.version; - info->file = StringToLowerASCII(plugin_info.unique_name); + info->path = FilePath(plugin_info.unique_name); for (size_t i = 0; i < mime_types.size(); ++i) { WebPluginMimeType mime_type; diff --git a/libcef/plugins/browser_plugin_list.cc b/libcef/plugins/browser_plugin_list.cc index aec1ba456..31fc995d5 100644 --- a/libcef/plugins/browser_plugin_list.cc +++ b/libcef/plugins/browser_plugin_list.cc @@ -61,7 +61,8 @@ void BrowserPluginList::RemovePlugin(const struct CefPluginInfo& plugin_info) { PluginList::iterator it = plugins_.begin(); for(; it != plugins_.end(); ++it) { - if((*it)->web_plugin_info().file == plugin_info.version_info.unique_name) { + if((*it)->web_plugin_info().path.BaseName().value() == + plugin_info.version_info.unique_name) { plugins_.erase(it); } } diff --git a/libcef/plugins/browser_plugin_stream.cc b/libcef/plugins/browser_plugin_stream.cc index 2e8dffe01..cc2edd217 100644 --- a/libcef/plugins/browser_plugin_stream.cc +++ b/libcef/plugins/browser_plugin_stream.cc @@ -27,7 +27,8 @@ BrowserPluginStream::~BrowserPluginStream() { bool BrowserPluginStream::Open(const std::string &mime_type, const std::string &headers, uint32 length, - uint32 last_modified) { + uint32 last_modified, + bool request_is_seekable) { headers_ = headers; NPP id = instance_->npp(); stream_.end = length; @@ -37,7 +38,7 @@ bool BrowserPluginStream::Open(const std::string &mime_type, stream_.notifyData = notify_data_; bool seekable_stream = false; - if (!headers_.empty()) { + if (request_is_seekable && !headers_.empty()) { stream_.headers = headers_.c_str(); if (headers_.find("Accept-Ranges: bytes") != std::string::npos) { seekable_stream = true; diff --git a/libcef/plugins/browser_plugin_stream.h b/libcef/plugins/browser_plugin_stream.h index e44116ea5..5816b0a97 100644 --- a/libcef/plugins/browser_plugin_stream.h +++ b/libcef/plugins/browser_plugin_stream.h @@ -40,10 +40,13 @@ class BrowserPluginStream : public base::RefCounted { // mime-types table and the extension (if any) in the URL. // If the size of the stream is known, use length to set the size. If // not known, set length to 0. + // The request_is_seekable parameter indicates whether byte range requests + // can be issued on the stream. bool Open(const std::string &mime_type, const std::string &headers, uint32 length, - uint32 last_modified); + uint32 last_modified, + bool request_is_seekable); // Writes to the stream. int Write(const char *buf, const int len, int data_offset); diff --git a/libcef/plugins/browser_plugin_stream_url.cc b/libcef/plugins/browser_plugin_stream_url.cc index bc31f7ce9..1d63eff60 100644 --- a/libcef/plugins/browser_plugin_stream_url.cc +++ b/libcef/plugins/browser_plugin_stream_url.cc @@ -43,11 +43,13 @@ void BrowserPluginStreamUrl::DidReceiveResponse(const std::string& mime_type, const std::string& headers, uint32 expected_length, uint32 last_modified, + bool request_is_seekable, bool* cancel) { bool opened = Open(mime_type, headers, expected_length, - last_modified); + last_modified, + request_is_seekable); if (!opened) { instance()->RemoveStream(this); *cancel = true; diff --git a/libcef/plugins/browser_plugin_stream_url.h b/libcef/plugins/browser_plugin_stream_url.h index 7c4ffffad..37500c646 100644 --- a/libcef/plugins/browser_plugin_stream_url.h +++ b/libcef/plugins/browser_plugin_stream_url.h @@ -49,11 +49,14 @@ class BrowserPluginStreamUrl : public BrowserPluginStream, const std::string& headers, uint32 expected_length, uint32 last_modified, + bool request_is_seekable, bool* cancel); void DidReceiveData(const char* buffer, int length, int data_offset); void DidFinishLoading(); void DidFail(); - + bool IsMultiByteResponseExpected() { + return seekable(); + } private: GURL url_; diff --git a/libcef/plugins/browser_plugin_string_stream.cc b/libcef/plugins/browser_plugin_string_stream.cc index 9b04c2d69..93d395292 100644 --- a/libcef/plugins/browser_plugin_string_stream.cc +++ b/libcef/plugins/browser_plugin_string_stream.cc @@ -22,7 +22,7 @@ BrowserPluginStringStream::~BrowserPluginStringStream() { void BrowserPluginStringStream::SendToPlugin(const std::string &data, const std::string &mime_type) { int length = static_cast(data.length()); - if (Open(mime_type, std::string(), length, 0)) { + if (Open(mime_type, std::string(), length, 0, false)) { // TODO - check if it was not fully sent, and figure out a backup plan. int written = Write(data.c_str(), length, 0); NPReason reason = written == length ? NPRES_DONE : NPRES_NETWORK_ERR; diff --git a/libcef/plugins/browser_webplugin_delegate_impl.cc b/libcef/plugins/browser_webplugin_delegate_impl.cc index 38b1418c6..b4205d1a7 100644 --- a/libcef/plugins/browser_webplugin_delegate_impl.cc +++ b/libcef/plugins/browser_webplugin_delegate_impl.cc @@ -50,13 +50,13 @@ std::list BrowserWebPluginDelegateImpl::throttle_queue_; BrowserWebPluginDelegateImpl* BrowserWebPluginDelegateImpl::current_plugin_instance_ = NULL; -bool BrowserWebPluginDelegateImpl::track_popup_menu_patched_ = false; -iat_patch::IATPatchFunction BrowserWebPluginDelegateImpl::iat_patch_helper_; +iat_patch::IATPatchFunction BrowserWebPluginDelegateImpl::iat_patch_track_popup_menu_; +iat_patch::IATPatchFunction BrowserWebPluginDelegateImpl::iat_patch_set_cursor_; BrowserWebPluginDelegateImpl* BrowserWebPluginDelegateImpl::Create( const struct CefPluginInfo& plugin_info, const std::string& mime_type, - HWND containing_window) { + gfx::NativeView containing_view) { scoped_refptr plugin = NPAPI::BrowserPluginLib::GetOrCreatePluginLib(plugin_info); @@ -69,7 +69,7 @@ BrowserWebPluginDelegateImpl* BrowserWebPluginDelegateImpl::Create( scoped_refptr instance = plugin->CreateInstance(mime_type); - return new BrowserWebPluginDelegateImpl(containing_window, instance.get()); + return new BrowserWebPluginDelegateImpl(containing_view, instance.get()); } bool BrowserWebPluginDelegateImpl::IsPluginDelegateWindow(HWND window) { @@ -124,9 +124,9 @@ LRESULT CALLBACK BrowserWebPluginDelegateImpl::HandleEventMessageFilterHook( } BrowserWebPluginDelegateImpl::BrowserWebPluginDelegateImpl( - HWND containing_window, + gfx::NativeView containing_view, NPAPI::BrowserPluginInstance *instance) - : parent_(containing_window), + : parent_(containing_view), instance_(instance), quirks_(0), plugin_(NULL), @@ -149,7 +149,8 @@ BrowserWebPluginDelegateImpl::BrowserWebPluginDelegateImpl( memset(&window_, 0, sizeof(window_)); const WebPluginInfo& plugin_info = instance_->plugin_lib()->web_plugin_info(); - std::wstring unique_name = file_util::GetFilenameFromPath(plugin_info.file); + std::wstring unique_name = + StringToLowerASCII(plugin_info.path.BaseName().value()); // Assign quirks here if required @@ -229,12 +230,24 @@ bool BrowserWebPluginDelegateImpl::Initialize(const GURL& url, // lives on the browser thread. Our workaround is to intercept the // TrackPopupMenu API for Silverlight and replace the window handle // with the dummy activation window. - if (windowless_ && !track_popup_menu_patched_ && + if (windowless_ && !iat_patch_track_popup_menu_.is_patched() && (quirks_ & PLUGIN_QUIRK_PATCH_TRACKPOPUP_MENU)) { - iat_patch_helper_.Patch(plugin_module_handle_, "user32.dll", - "TrackPopupMenu", - BrowserWebPluginDelegateImpl::TrackPopupMenuPatch); - track_popup_menu_patched_ = true; + iat_patch_track_popup_menu_.Patch( + plugin_module_handle_, "user32.dll", "TrackPopupMenu", + BrowserWebPluginDelegateImpl::TrackPopupMenuPatch); + } + + // Windowless plugins can set cursors by calling the SetCursor API. This + // works because the thread inputs of the browser UI thread and the plugin + // thread are attached. We intercept the SetCursor API for windowless plugins + // and remember the cursor being set. This is shipped over to the browser + // in the HandleEvent call, which ensures that the cursor does not change + // when a windowless plugin instance changes the cursor in a background tab. + if (windowless_ && !iat_patch_set_cursor_.is_patched() && + (quirks_ & PLUGIN_QUIRK_PATCH_SETCURSOR)) { + iat_patch_set_cursor_.Patch(plugin_module_handle_, "user32.dll", + "SetCursor", + BrowserWebPluginDelegateImpl::SetCursorPatch); } return true; } @@ -253,6 +266,19 @@ void BrowserWebPluginDelegateImpl::DestroyInstance() { } instance_->NPP_Destroy(); + + if (instance_->plugin_lib()) { + // Unpatch if this is the last plugin instance. + if (instance_->plugin_lib()->instance_count() == 1) { + if (iat_patch_set_cursor_.is_patched()) { + iat_patch_set_cursor_.Unpatch(); + } + + if (iat_patch_track_popup_menu_.is_patched()) { + iat_patch_track_popup_menu_.Unpatch(); + } + } + } instance_->set_web_plugin(NULL); instance_ = 0; @@ -333,8 +359,8 @@ void BrowserWebPluginDelegateImpl::DidManualLoadFail() { instance()->DidManualLoadFail(); } -std::wstring BrowserWebPluginDelegateImpl::GetPluginPath() { - return instance_->plugin_lib()->web_plugin_info().file; +FilePath BrowserWebPluginDelegateImpl::GetPluginPath() { + return instance_->plugin_lib()->web_plugin_info().path; } void BrowserWebPluginDelegateImpl::InstallMissingPlugin() { @@ -767,6 +793,8 @@ LRESULT CALLBACK BrowserWebPluginDelegateImpl::NativeWndProc( return TRUE; } + current_plugin_instance_ = delegate; + switch (message) { case WM_NCDESTROY: { RemoveProp(hwnd, kWebPluginDelegateProperty); @@ -784,6 +812,7 @@ LRESULT CALLBACK BrowserWebPluginDelegateImpl::NativeWndProc( if (delegate->quirks() & PLUGIN_QUIRK_THROTTLE_WM_USER_PLUS_ONE) { BrowserWebPluginDelegateImpl::ThrottleMessage( delegate->plugin_wnd_proc_, hwnd, message, wparam, lparam); + current_plugin_instance_ = NULL; return FALSE; } break; @@ -810,6 +839,7 @@ LRESULT CALLBACK BrowserWebPluginDelegateImpl::NativeWndProc( LRESULT result = CallWindowProc(delegate->plugin_wnd_proc_, hwnd, message, wparam, lparam); delegate->is_calling_wndproc = false; + current_plugin_instance_ = NULL; return result; } @@ -964,12 +994,11 @@ bool BrowserWebPluginDelegateImpl::HandleEvent(NPEvent* event, bool ret = instance()->NPP_HandleEvent(event) != 0; - // Snag a reference to the current cursor ASAP in case the plugin modified - // it. There is a nasty race condition here with the multiprocess browser - // as someone might be setting the cursor in the main process as well. - HCURSOR last_cursor; - if (WM_MOUSEMOVE == event->event) { - last_cursor = ::GetCursor(); + if (event->event == WM_MOUSEMOVE) { + // Snag a reference to the current cursor ASAP in case the plugin modified + // it. There is a nasty race condition here with the multiprocess browser + // as someone might be setting the cursor in the main process as well. + *cursor = current_windowless_cursor_; } if (pop_user_gesture) { @@ -998,10 +1027,6 @@ bool BrowserWebPluginDelegateImpl::HandleEvent(NPEvent* event, ::SetFocus(prev_focus_window); } - if (WM_MOUSEMOVE == event->event) { - cursor->InitFromCursor(last_cursor); - } - return ret; } @@ -1090,3 +1115,25 @@ BOOL WINAPI BrowserWebPluginDelegateImpl::TrackPopupMenuPatch( } return TrackPopupMenu(menu, flags, x, y, reserved, window, rect); } + +HCURSOR WINAPI BrowserWebPluginDelegateImpl::SetCursorPatch(HCURSOR cursor) { + // The windowless flash plugin periodically calls SetCursor in a wndproc + // instantiated on the plugin thread. This causes annoying cursor flicker + // when the mouse is moved on a foreground tab, with a windowless plugin + // instance in a background tab. We just ignore the call here. + if (!current_plugin_instance_) + return GetCursor(); + + if (!current_plugin_instance_->windowless()) { + return SetCursor(cursor); + } + + // It is ok to pass NULL here to GetCursor as we are not looking for cursor + // types defined by Webkit. + HCURSOR previous_cursor = + current_plugin_instance_->current_windowless_cursor_.GetCursor(NULL); + + current_plugin_instance_->current_windowless_cursor_.InitFromExternalCursor( + cursor); + return previous_cursor; +} \ No newline at end of file diff --git a/libcef/plugins/browser_webplugin_delegate_impl.h b/libcef/plugins/browser_webplugin_delegate_impl.h index 322a98ca0..b26954bcb 100644 --- a/libcef/plugins/browser_webplugin_delegate_impl.h +++ b/libcef/plugins/browser_webplugin_delegate_impl.h @@ -11,11 +11,13 @@ #include "browser_plugin_lib.h" +#include "base/file_path.h" +#include "base/gfx/native_widget_types.h" #include "base/iat_patch.h" #include "base/ref_counted.h" #include "base/task.h" -#include "webkit/glue/webplugin_delegate.h" #include "third_party/npapi/bindings/npapi.h" +#include "webkit/glue/webplugin_delegate.h" #include "webkit/glue/webcursor.h" namespace NPAPI { @@ -28,7 +30,7 @@ class BrowserWebPluginDelegateImpl : public WebPluginDelegate { public: static BrowserWebPluginDelegateImpl* Create(const struct CefPluginInfo& plugin_info, const std::string& mime_type, - HWND containing_window); + gfx::NativeView containing_view); static bool IsPluginDelegateWindow(HWND window); static bool GetPluginNameFromWindow(HWND window, std::wstring *plugin_name); @@ -72,7 +74,7 @@ class BrowserWebPluginDelegateImpl : public WebPluginDelegate { virtual void DidReceiveManualData(const char* buffer, int length); virtual void DidFinishManualLoading(); virtual void DidManualLoadFail(); - virtual std::wstring GetPluginPath(); + virtual FilePath GetPluginPath(); virtual void InstallMissingPlugin(); virtual WebPluginResourceClient* CreateResourceClient(int resource_id, const std::string &url, @@ -94,6 +96,7 @@ class BrowserWebPluginDelegateImpl : public WebPluginDelegate { PLUGIN_QUIRK_DONT_ALLOW_MULTIPLE_INSTANCES = 16, PLUGIN_QUIRK_DIE_AFTER_UNLOAD = 32, PLUGIN_QUIRK_PATCH_TRACKPOPUP_MENU = 64, + PLUGIN_QUIRK_PATCH_SETCURSOR = 128, }; int quirks() { return quirks_; } @@ -105,7 +108,7 @@ class BrowserWebPluginDelegateImpl : public WebPluginDelegate { bool visible); private: - BrowserWebPluginDelegateImpl(HWND containing_window, + BrowserWebPluginDelegateImpl(gfx::NativeView containing_view, NPAPI::BrowserPluginInstance *instance); ~BrowserWebPluginDelegateImpl(); @@ -265,11 +268,8 @@ class BrowserWebPluginDelegateImpl : public WebPluginDelegate { // The plugin module handle. HMODULE plugin_module_handle_; - // Indicates whether we IAT patched the TrackPopupMenu function. - static bool track_popup_menu_patched_; - - // Helper object for patching the import table of Silverlight. - static iat_patch::IATPatchFunction iat_patch_helper_; + // Helper object for patching the TrackPopupMenu API + static iat_patch::IATPatchFunction iat_patch_track_popup_menu_; // TrackPopupMenu interceptor. Parameters are the same as the Win32 function // TrackPopupMenu. @@ -277,6 +277,15 @@ class BrowserWebPluginDelegateImpl : public WebPluginDelegate { int y, int reserved, HWND window, const RECT* rect); + // SetCursor interceptor for windowless plugins. + static HCURSOR WINAPI SetCursorPatch(HCURSOR cursor); + + // Helper object for patching the SetCursor API + static iat_patch::IATPatchFunction iat_patch_set_cursor_; + + // Holds the current cursor set by the windowless plugin. + WebCursor current_windowless_cursor_; + DISALLOW_EVIL_CONSTRUCTORS(BrowserWebPluginDelegateImpl); }; diff --git a/libcef/printing/win_printing_context.cc b/libcef/printing/win_printing_context.cc index fc5dd4029..6593ffda3 100644 --- a/libcef/printing/win_printing_context.cc +++ b/libcef/printing/win_printing_context.cc @@ -252,7 +252,7 @@ bool PrintingContext::InitializeSettings(const DEVMODE& dev_mode, const std::wstring& new_device_name, const PRINTPAGERANGE* ranges, int number_ranges) { - gfx::PlatformDeviceWin::InitializeDC(hdc_); + skia::PlatformDeviceWin::InitializeDC(hdc_); DCHECK(GetDeviceCaps(hdc_, CLIPCAPS)); DCHECK(GetDeviceCaps(hdc_, RASTERCAPS) & RC_STRETCHDIB); DCHECK(GetDeviceCaps(hdc_, RASTERCAPS) & RC_BITMAP64); diff --git a/libcef/webwidget_host.cc b/libcef/webwidget_host.cc index 93eed9ce4..e57a6a7f9 100644 --- a/libcef/webwidget_host.cc +++ b/libcef/webwidget_host.cc @@ -213,7 +213,7 @@ void WebWidgetHost::Paint() { if (!canvas_.get()) { ResetScrollRect(); paint_rect_ = client_rect; - canvas_.reset(new gfx::PlatformCanvas( + canvas_.reset(new skia::PlatformCanvas( paint_rect_.width(), paint_rect_.height(), true)); } @@ -285,6 +285,14 @@ void WebWidgetHost::MouseEvent(UINT message, WPARAM wparam, LPARAM lparam) { break; } webwidget_->HandleInputEvent(&event); + + if (event.type == WebInputEvent::MOUSE_DOWN) { + // This mimics a temporary workaround in RenderWidgetHostViewWin + // for bug 765011 to get focus when the mouse is clicked. This + // happens after the mouse down event is sent to the renderer + // because normally Windows does a WM_SETFOCUS after WM_LBUTTONDOWN. + ::SetFocus(view_); + } } void WebWidgetHost::WheelEvent(WPARAM wparam, LPARAM lparam) { diff --git a/libcef/webwidget_host.h b/libcef/webwidget_host.h index 42c5ebcb4..1762b05c6 100644 --- a/libcef/webwidget_host.h +++ b/libcef/webwidget_host.h @@ -100,7 +100,7 @@ class WebWidgetHost { gfx::NativeView view_; WebWidget* webwidget_; - scoped_ptr canvas_; + scoped_ptr canvas_; // specifies the portion of the webwidget that needs painting gfx::Rect paint_rect_;