diff options
author | hanxi <hanxi@chromium.org> | 2014-08-25 12:13:41 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-08-25 19:15:03 +0000 |
commit | 63bf863b12e8c2be593da2318af8ab7c7fbcc8a4 (patch) | |
tree | 38c22a5e66a30e0ebd10fa3d5a213def2c9052a5 | |
parent | 1c693998d75f78e94862c324afba3815356ecaf1 (diff) | |
download | chromium_src-63bf863b12e8c2be593da2318af8ab7c7fbcc8a4.zip chromium_src-63bf863b12e8c2be593da2318af8ab7c7fbcc8a4.tar.gz chromium_src-63bf863b12e8c2be593da2318af8ab7c7fbcc8a4.tar.bz2 |
Move core web_view code to extensions.
BUG=352290
Review URL: https://codereview.chromium.org/496873006
Cr-Commit-Position: refs/heads/master@{#291732}
46 files changed, 243 insertions, 166 deletions
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 5c89f1b..367d7e9 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc @@ -221,12 +221,12 @@ #include "chrome/browser/extensions/chrome_content_browser_client_extensions_part.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_util.h" -#include "chrome/browser/guest_view/web_view/web_view_guest.h" -#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h" -#include "chrome/browser/guest_view/web_view/web_view_renderer_state.h" #include "extensions/browser/guest_view/guest_view_base.h" #include "extensions/browser/guest_view/guest_view_constants.h" #include "extensions/browser/guest_view/guest_view_manager.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" +#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #include "extensions/browser/suggest_permission_util.h" #include "extensions/common/manifest_handlers/background_info.h" #endif diff --git a/chrome/browser/extensions/api/chrome_extensions_api_client.cc b/chrome/browser/extensions/api/chrome_extensions_api_client.cc index 8f600c5..c15c1df 100644 --- a/chrome/browser/extensions/api/chrome_extensions_api_client.cc +++ b/chrome/browser/extensions/api/chrome_extensions_api_client.cc @@ -8,11 +8,14 @@ #include "chrome/browser/extensions/api/storage/sync_value_store_cache.h" #include "chrome/browser/guest_view/app_view/chrome_app_view_guest_delegate.h" #include "chrome/browser/guest_view/extension_options/extension_options_guest.h" -#include "chrome/browser/guest_view/web_view/web_view_guest.h" +#include "chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.h" +#include "chrome/browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "device/hid/hid_service.h" #include "extensions/browser/guest_view/app_view/app_view_guest.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" #if defined(ENABLE_CONFIGURATION_POLICY) #include "chrome/browser/extensions/api/storage/managed_value_store_cache.h" @@ -66,6 +69,17 @@ AppViewGuestDelegate* ChromeExtensionsAPIClient::CreateAppViewGuestDelegate() return new ChromeAppViewGuestDelegate(); } +WebViewGuestDelegate* ChromeExtensionsAPIClient::CreateWebViewGuestDelegate( + WebViewGuest* web_view_guest) const { + return new ChromeWebViewGuestDelegate(web_view_guest); +} + +WebViewPermissionHelperDelegate* ChromeExtensionsAPIClient:: + CreateWebViewPermissionHelperDelegate( + WebViewPermissionHelper* web_view_permission_helper) const { + return new ChromeWebViewPermissionHelperDelegate(web_view_permission_helper); +} + device::HidService* ChromeExtensionsAPIClient::GetHidService() { if (!hid_service_) { hid_service_.reset(device::HidService::Create( @@ -76,9 +90,7 @@ device::HidService* ChromeExtensionsAPIClient::GetHidService() { } void ChromeExtensionsAPIClient::RegisterGuestViewTypes() { - AppViewGuest::Register(); ExtensionOptionsGuest::Register(); - WebViewGuest::Register(); } } // namespace extensions diff --git a/chrome/browser/extensions/api/chrome_extensions_api_client.h b/chrome/browser/extensions/api/chrome_extensions_api_client.h index 1e45114..d6ab146 100644 --- a/chrome/browser/extensions/api/chrome_extensions_api_client.h +++ b/chrome/browser/extensions/api/chrome_extensions_api_client.h @@ -34,6 +34,11 @@ class ChromeExtensionsAPIClient : public ExtensionsAPIClient { int guest_instance_id, const std::string& guest_extension_id) OVERRIDE; virtual AppViewGuestDelegate* CreateAppViewGuestDelegate() const OVERRIDE; + virtual WebViewGuestDelegate* CreateWebViewGuestDelegate( + WebViewGuest* web_view_guest) const OVERRIDE; + virtual WebViewPermissionHelperDelegate* + CreateWebViewPermissionHelperDelegate( + WebViewPermissionHelper* web_view_permission_helper) const OVERRIDE; virtual device::HidService* GetHidService() OVERRIDE; virtual void RegisterGuestViewTypes() OVERRIDE; diff --git a/chrome/browser/extensions/api/declarative/declarative_api.cc b/chrome/browser/extensions/api/declarative/declarative_api.cc index 9967de4..cc9d35b 100644 --- a/chrome/browser/extensions/api/declarative/declarative_api.cc +++ b/chrome/browser/extensions/api/declarative/declarative_api.cc @@ -9,14 +9,14 @@ #include "base/task_runner_util.h" #include "base/values.h" #include "chrome/browser/extensions/api/declarative/rules_registry_service.h" -#include "chrome/browser/guest_view/web_view/web_view_constants.h" -#include "chrome/browser/guest_view/web_view/web_view_guest.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/api/events.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" #include "extensions/browser/extension_system.h" +#include "extensions/browser/guest_view/web_view/web_view_constants.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" #include "extensions/common/extension_api.h" #include "extensions/common/permissions/permissions_data.h" diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc index ddba91c..6eb9dd5 100644 --- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc +++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc @@ -18,9 +18,9 @@ #include "chrome/browser/extensions/api/web_request/web_request_api_constants.h" #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" #include "chrome/browser/extensions/api/web_request/web_request_permissions.h" -#include "chrome/browser/guest_view/web_view/web_view_renderer_state.h" #include "content/public/browser/resource_request_info.h" #include "content/public/common/url_constants.h" +#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #include "extensions/browser/info_map.h" #include "extensions/common/error_utils.h" #include "extensions/common/extension.h" diff --git a/chrome/browser/extensions/api/web_request/web_request_api.cc b/chrome/browser/extensions/api/web_request/web_request_api.cc index 188940c..0bbea43 100644 --- a/chrome/browser/extensions/api/web_request/web_request_api.cc +++ b/chrome/browser/extensions/api/web_request/web_request_api.cc @@ -32,8 +32,6 @@ #include "chrome/browser/extensions/extension_renderer_state.h" #include "chrome/browser/extensions/extension_warning_service.h" #include "chrome/browser/extensions/extension_warning_set.h" -#include "chrome/browser/guest_view/web_view/web_view_constants.h" -#include "chrome/browser/guest_view/web_view/web_view_renderer_state.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/common/extensions/api/web_request.h" @@ -51,6 +49,8 @@ #include "extensions/browser/extension_prefs.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_system.h" +#include "extensions/browser/guest_view/web_view/web_view_constants.h" +#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #include "extensions/browser/info_map.h" #include "extensions/browser/runtime_data.h" #include "extensions/common/error_utils.h" diff --git a/chrome/browser/extensions/api/web_request/web_request_permissions.cc b/chrome/browser/extensions/api/web_request/web_request_permissions.cc index d343110..1de33ff 100644 --- a/chrome/browser/extensions/api/web_request/web_request_permissions.cc +++ b/chrome/browser/extensions/api/web_request/web_request_permissions.cc @@ -6,10 +6,10 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" -#include "chrome/browser/guest_view/web_view/web_view_renderer_state.h" #include "chrome/common/extensions/extension_constants.h" #include "chrome/common/url_constants.h" #include "content/public/browser/resource_request_info.h" +#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #include "extensions/browser/info_map.h" #include "extensions/common/constants.h" #include "extensions/common/extension.h" diff --git a/chrome/browser/extensions/api/web_view/web_view_internal_api.cc b/chrome/browser/extensions/api/web_view/web_view_internal_api.cc index 795b38c..404bc62 100644 --- a/chrome/browser/extensions/api/web_view/web_view_internal_api.cc +++ b/chrome/browser/extensions/api/web_view/web_view_internal_api.cc @@ -9,7 +9,6 @@ #include "chrome/browser/extensions/api/context_menus/context_menus_api.h" #include "chrome/browser/extensions/api/context_menus/context_menus_api_helpers.h" #include "chrome/browser/extensions/tab_helper.h" -#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/api/web_view_internal.h" #include "content/public/browser/render_process_host.h" @@ -17,6 +16,7 @@ #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" #include "content/public/common/stop_find_action.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" #include "extensions/common/error_utils.h" #include "third_party/WebKit/public/web/WebFindOptions.h" diff --git a/chrome/browser/extensions/api/web_view/web_view_internal_api.h b/chrome/browser/extensions/api/web_view/web_view_internal_api.h index 4cf3e84..b31717e 100644 --- a/chrome/browser/extensions/api/web_view/web_view_internal_api.h +++ b/chrome/browser/extensions/api/web_view/web_view_internal_api.h @@ -7,8 +7,8 @@ #include "chrome/browser/extensions/api/capture_web_contents_function.h" #include "chrome/browser/extensions/api/execute_code_function.h" -#include "chrome/browser/guest_view/web_view/web_view_find_helper.h" -#include "chrome/browser/guest_view/web_view/web_view_guest.h" +#include "extensions/browser/guest_view/web_view/web_view_find_helper.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" // WARNING: WebViewInternal could be loaded in an unblessed context, thus any // new APIs must extend WebViewInternalExtensionFunction or diff --git a/chrome/browser/extensions/menu_manager.cc b/chrome/browser/extensions/menu_manager.cc index b102eb1..d20be62 100644 --- a/chrome/browser/extensions/menu_manager.cc +++ b/chrome/browser/extensions/menu_manager.cc @@ -17,7 +17,6 @@ #include "chrome/browser/extensions/extension_tab_util.h" #include "chrome/browser/extensions/menu_manager_factory.h" #include "chrome/browser/extensions/tab_helper.h" -#include "chrome/browser/guest_view/web_view/web_view_guest.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/api/context_menus.h" #include "chrome/common/extensions/api/web_view_internal.h" @@ -29,6 +28,7 @@ #include "extensions/browser/event_router.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_system.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" #include "extensions/browser/state_store.h" #include "extensions/common/extension.h" #include "extensions/common/manifest_handlers/background_info.h" diff --git a/chrome/browser/extensions/url_request_util.cc b/chrome/browser/extensions/url_request_util.cc index 3f63e6b..1d3a84cc 100644 --- a/chrome/browser/extensions/url_request_util.cc +++ b/chrome/browser/extensions/url_request_util.cc @@ -13,7 +13,6 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/task_runner_util.h" -#include "chrome/browser/guest_view/web_view/web_view_renderer_state.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/extensions/manifest_url_handler.h" #include "content/public/browser/browser_thread.h" @@ -21,6 +20,7 @@ #include "extensions/browser/component_extension_resource_manager.h" #include "extensions/browser/extension_protocols.h" #include "extensions/browser/extensions_browser_client.h" +#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #include "extensions/browser/info_map.h" #include "extensions/common/file_util.h" #include "extensions/common/manifest_handlers/icons_handler.h" diff --git a/chrome/browser/geolocation/geolocation_permission_context_extensions.cc b/chrome/browser/geolocation/geolocation_permission_context_extensions.cc index 765e516..ca1de66 100644 --- a/chrome/browser/geolocation/geolocation_permission_context_extensions.cc +++ b/chrome/browser/geolocation/geolocation_permission_context_extensions.cc @@ -8,9 +8,9 @@ #if defined(ENABLE_EXTENSIONS) #include "chrome/browser/content_settings/permission_request_id.h" -#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h" #include "chrome/browser/profiles/profile.h" #include "extensions/browser/extension_registry.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" #include "extensions/browser/process_map.h" #include "extensions/browser/suggest_permission_util.h" #include "extensions/browser/view_type_utils.h" diff --git a/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc b/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc index 8175022..67a5434 100644 --- a/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc +++ b/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc @@ -5,15 +5,16 @@ #include "chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.h" +#include "chrome/browser/extensions/api/web_request/web_request_api.h" #include "chrome/browser/extensions/chrome_extension_web_contents_observer.h" #include "chrome/browser/favicon/favicon_tab_helper.h" -#include "chrome/browser/guest_view/web_view/web_view_constants.h" #include "chrome/browser/renderer_context_menu/render_view_context_menu.h" #include "chrome/browser/ui/pdf/pdf_tab_helper.h" #include "chrome/browser/ui/zoom/zoom_controller.h" #include "chrome/common/chrome_version_info.h" #include "components/renderer_context_menu/context_menu_delegate.h" #include "content/public/common/page_zoom.h" +#include "extensions/browser/guest_view/web_view/web_view_constants.h" #if defined(ENABLE_PRINTING) #if defined(ENABLE_FULL_PRINTING) @@ -24,13 +25,25 @@ #endif // defined(ENABLE_FULL_PRINTING) #endif // defined(ENABLE_PRINTING) +void RemoveWebViewEventListenersOnIOThread( + void* profile, + const std::string& extension_id, + int embedder_process_id, + int view_instance_id) { + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); + ExtensionWebRequestEventRouter::GetInstance()->RemoveWebViewEventListeners( + profile, + extension_id, + embedder_process_id, + view_instance_id); +} + ChromeWebViewGuestDelegate::ChromeWebViewGuestDelegate( extensions::WebViewGuest* web_view_guest) - : WebViewGuestDelegate(), + : WebViewGuestDelegate(web_view_guest), pending_context_menu_request_id_(0), chromevox_injected_(false), - current_zoom_factor_(1.0), - web_view_guest_(web_view_guest) { + current_zoom_factor_(1.0) { } ChromeWebViewGuestDelegate::~ChromeWebViewGuestDelegate() { @@ -55,7 +68,7 @@ bool ChromeWebViewGuestDelegate::HandleContextMenu( MenuModelToValue(pending_menu_->menu_model()); args->Set(webview::kContextMenuItems, items.release()); args->SetInteger(webview::kRequestId, request_id); - web_view_guest_->DispatchEventToEmbedder( + web_view_guest()->DispatchEventToEmbedder( new extensions::GuestViewBase::Event( webview::kEventContextMenu, args.Pass())); return true; @@ -87,6 +100,25 @@ void ChromeWebViewGuestDelegate::OnAttachWebViewHelpers( PDFTabHelper::CreateForWebContents(contents); } +void ChromeWebViewGuestDelegate::OnEmbedderDestroyed() { + // TODO(fsamuel): WebRequest event listeners for <webview> should survive + // reparenting of a <webview> within a single embedder. Right now, we keep + // around the browser state for the listener for the lifetime of the embedder. + // Ideally, the lifetime of the listeners should match the lifetime of the + // <webview> DOM node. Once http://crbug.com/156219 is resolved we can move + // the call to RemoveWebViewEventListenersOnIOThread back to + // WebViewGuest::WebContentsDestroyed. + content::BrowserThread::PostTask( + content::BrowserThread::IO, + FROM_HERE, + base::Bind( + &RemoveWebViewEventListenersOnIOThread, + web_view_guest()->browser_context(), + web_view_guest()->embedder_extension_id(), + web_view_guest()->embedder_render_process_id(), + web_view_guest()->view_instance_id())); +} + void ChromeWebViewGuestDelegate::OnDidCommitProvisionalLoadForFrame( bool is_main_frame) { // Update the current zoom factor for the new page. @@ -118,10 +150,10 @@ void ChromeWebViewGuestDelegate::OnDocumentLoadedInFrame( void ChromeWebViewGuestDelegate::OnGuestDestroyed() { // Clean up custom context menu items for this guest. extensions::MenuManager* menu_manager = extensions::MenuManager::Get( - Profile::FromBrowserContext(web_view_guest_->browser_context())); + Profile::FromBrowserContext(web_view_guest()->browser_context())); menu_manager->RemoveAllContextItems(extensions::MenuItem::ExtensionKey( - web_view_guest_->embedder_extension_id(), - web_view_guest_->view_instance_id())); + web_view_guest()->embedder_extension_id(), + web_view_guest()->view_instance_id())); } // static @@ -150,7 +182,7 @@ void ChromeWebViewGuestDelegate::OnSetZoom(double zoom_factor) { scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); args->SetDouble(webview::kOldZoomFactor, current_zoom_factor_); args->SetDouble(webview::kNewZoomFactor, zoom_factor); - web_view_guest_->DispatchEventToEmbedder( + web_view_guest()->DispatchEventToEmbedder( new extensions::GuestViewBase::Event( webview::kEventZoomChange, args.Pass())); current_zoom_factor_ = zoom_factor; diff --git a/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.h b/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.h index 6c1901a..c22d0cc 100644 --- a/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.h +++ b/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.h @@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_CHROME_WEB_VIEW_GUEST_DELEGATE_H_ #define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_CHROME_WEB_VIEW_GUEST_DELEGATE_H_ -#include "chrome/browser/guest_view/web_view/web_view_guest.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" #include "extensions/browser/guest_view/web_view/web_view_guest_delegate.h" #if defined(OS_CHROMEOS) @@ -29,6 +29,7 @@ class ChromeWebViewGuestDelegate : public extensions::WebViewGuestDelegate { virtual bool HandleContextMenu( const content::ContextMenuParams& params) OVERRIDE; virtual void OnAttachWebViewHelpers(content::WebContents* contents) OVERRIDE; + virtual void OnEmbedderDestroyed() OVERRIDE; virtual void OnDidCommitProvisionalLoadForFrame(bool is_main_frame) OVERRIDE; virtual void OnDidInitialize() OVERRIDE; virtual void OnDocumentLoadedInFrame( @@ -41,7 +42,7 @@ class ChromeWebViewGuestDelegate : public extensions::WebViewGuestDelegate { private: content::WebContents* guest_web_contents() const { - return web_view_guest_->guest_web_contents(); + return web_view_guest()->guest_web_contents(); } // Returns the top level items (ignoring submenus) as Value. @@ -70,8 +71,6 @@ class ChromeWebViewGuestDelegate : public extensions::WebViewGuestDelegate { // shown. This is .Reset() after ShowContextMenu(). scoped_ptr<RenderViewContextMenu> pending_menu_; - extensions::WebViewGuest* web_view_guest_; - #if defined(OS_CHROMEOS) // Subscription to receive notifications on changes to a11y settings. scoped_ptr<chromeos::AccessibilityStatusSubscription> diff --git a/chrome/browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.cc b/chrome/browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.cc index 8ec076b..3279b88 100644 --- a/chrome/browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.cc +++ b/chrome/browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.cc @@ -7,18 +7,16 @@ #include "chrome/browser/content_settings/tab_specific_content_settings.h" #include "chrome/browser/geolocation/geolocation_permission_context.h" #include "chrome/browser/geolocation/geolocation_permission_context_factory.h" -#include "chrome/browser/guest_view/web_view/web_view_constants.h" -#include "chrome/browser/guest_view/web_view/web_view_guest.h" #include "chrome/browser/plugins/chrome_plugin_service_filter.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/render_messages.h" #include "content/public/browser/user_metrics.h" +#include "extensions/browser/guest_view/web_view/web_view_constants.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" ChromeWebViewPermissionHelperDelegate::ChromeWebViewPermissionHelperDelegate( extensions::WebViewPermissionHelper* web_view_permission_helper) - : WebViewPermissionHelperDelegate( - web_view_permission_helper->web_view_guest()->guest_web_contents()), - web_view_permission_helper_(web_view_permission_helper), + : WebViewPermissionHelperDelegate(web_view_permission_helper), weak_factory_(this) { } @@ -72,7 +70,7 @@ void ChromeWebViewPermissionHelperDelegate::OnBlockedUnauthorizedPlugin( base::DictionaryValue info; info.SetString(std::string(kPluginName), name); info.SetString(std::string(kPluginIdentifier), identifier); - web_view_permission_helper_->RequestPermission( + web_view_permission_helper()->RequestPermission( WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN, info, base::Bind(&ChromeWebViewPermissionHelperDelegate::OnPermissionResponse, @@ -129,7 +127,7 @@ void ChromeWebViewPermissionHelperDelegate::RequestMediaAccessPermission( const content::MediaResponseCallback& callback) { base::DictionaryValue request_info; request_info.SetString(guestview::kUrl, request.security_origin.spec()); - web_view_permission_helper_->RequestPermission( + web_view_permission_helper()->RequestPermission( WEB_VIEW_PERMISSION_TYPE_MEDIA, request_info, base::Bind( @@ -168,7 +166,7 @@ void ChromeWebViewPermissionHelperDelegate::CanDownload( const base::Callback<void(bool)>& callback) { base::DictionaryValue request_info; request_info.SetString(guestview::kUrl, url.spec()); - web_view_permission_helper_->RequestPermission( + web_view_permission_helper()->RequestPermission( WEB_VIEW_PERMISSION_TYPE_DOWNLOAD, request_info, base::Bind( @@ -196,7 +194,7 @@ void ChromeWebViewPermissionHelperDelegate::RequestPointerLockPermission( request_info.SetString(guestview::kUrl, web_contents()->GetLastCommittedURL().spec()); - web_view_permission_helper_->RequestPermission( + web_view_permission_helper()->RequestPermission( WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK, request_info, base::Bind(&ChromeWebViewPermissionHelperDelegate:: @@ -233,7 +231,7 @@ void ChromeWebViewPermissionHelperDelegate::RequestGeolocationPermission( bridge_id, user_gesture, callback); - int request_id = web_view_permission_helper_->RequestPermission( + int request_id = web_view_permission_helper()->RequestPermission( WEB_VIEW_PERMISSION_TYPE_GEOLOCATION, request_info, permission_callback, @@ -275,7 +273,7 @@ void ChromeWebViewPermissionHelperDelegate::OnGeolocationPermissionResponse( void ChromeWebViewPermissionHelperDelegate::CancelGeolocationPermissionRequest( int bridge_id) { int request_id = RemoveBridgeID(bridge_id); - web_view_permission_helper_->CancelPendingPermissionRequest(request_id); + web_view_permission_helper()->CancelPendingPermissionRequest(request_id); } int ChromeWebViewPermissionHelperDelegate::RemoveBridgeID(int bridge_id) { @@ -295,7 +293,7 @@ void ChromeWebViewPermissionHelperDelegate::RequestFileSystemPermission( const base::Callback<void(bool)>& callback) { base::DictionaryValue request_info; request_info.SetString(guestview::kUrl, url.spec()); - web_view_permission_helper_->RequestPermission( + web_view_permission_helper()->RequestPermission( WEB_VIEW_PERMISSION_TYPE_FILESYSTEM, request_info, base::Bind(&ChromeWebViewPermissionHelperDelegate:: diff --git a/chrome/browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.h b/chrome/browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.h index 11bdd11..fbf5bab 100644 --- a/chrome/browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.h +++ b/chrome/browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.h @@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_CHROME_WEB_VIEW_PERMISSION_HELPER_DELEGATE_H_ #define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_CHROME_WEB_VIEW_PERMISSION_HELPER_DELEGATE_H_ -#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" #include "extensions/browser/guest_view/web_view/web_view_permission_helper_delegate.h" namespace extensions { @@ -130,11 +130,9 @@ class ChromeWebViewPermissionHelperDelegate : bool allowed); extensions::WebViewGuest* web_view_guest() { - return web_view_permission_helper_->web_view_guest(); + return web_view_permission_helper()->web_view_guest(); } - extensions::WebViewPermissionHelper* web_view_permission_helper_; - std::map<int, int> bridge_id_to_request_id_map_; base::WeakPtrFactory<ChromeWebViewPermissionHelperDelegate> weak_factory_; diff --git a/chrome/browser/plugins/plugin_info_message_filter.cc b/chrome/browser/plugins/plugin_info_message_filter.cc index f1d721c..e6f9415 100644 --- a/chrome/browser/plugins/plugin_info_message_filter.cc +++ b/chrome/browser/plugins/plugin_info_message_filter.cc @@ -27,7 +27,7 @@ #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. #if defined(ENABLE_EXTENSIONS) -#include "chrome/browser/guest_view/web_view/web_view_renderer_state.h" +#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #endif #if defined(OS_WIN) diff --git a/chrome/browser/renderer_context_menu/context_menu_content_type_factory.cc b/chrome/browser/renderer_context_menu/context_menu_content_type_factory.cc index b94f3da..351ff01 100644 --- a/chrome/browser/renderer_context_menu/context_menu_content_type_factory.cc +++ b/chrome/browser/renderer_context_menu/context_menu_content_type_factory.cc @@ -13,11 +13,11 @@ #if defined(ENABLE_EXTENSIONS) #include "chrome/browser/app_mode/app_mode_utils.h" #include "chrome/browser/guest_view/web_view/context_menu_content_type_web_view.h" -#include "chrome/browser/guest_view/web_view/web_view_guest.h" #include "chrome/browser/renderer_context_menu/context_menu_content_type_app_mode.h" #include "chrome/browser/renderer_context_menu/context_menu_content_type_extension_popup.h" #include "chrome/browser/renderer_context_menu/context_menu_content_type_panel.h" #include "chrome/browser/renderer_context_menu/context_menu_content_type_platform_app.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" #include "extensions/browser/view_type_utils.h" #include "extensions/common/extension.h" #endif diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc index 6ea1b71..b9cd2a9 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc @@ -31,7 +31,6 @@ #include "chrome/browser/download/download_stats.h" #include "chrome/browser/extensions/devtools_util.h" #include "chrome/browser/extensions/extension_service.h" -#include "chrome/browser/guest_view/web_view/web_view_guest.h" #include "chrome/browser/plugins/chrome_plugin_service_filter.h" #include "chrome/browser/prefs/incognito_mode_prefs.h" #include "chrome/browser/profiles/profile.h" @@ -88,6 +87,7 @@ #include "content/public/common/url_utils.h" #include "extensions/browser/extension_host.h" #include "extensions/browser/extension_system.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" #include "extensions/browser/view_type_utils.h" #include "extensions/common/extension.h" #include "net/base/escape.h" diff --git a/chrome/browser/renderer_host/chrome_render_message_filter.cc b/chrome/browser/renderer_host/chrome_render_message_filter.cc index ef49c8e..a410b4b 100644 --- a/chrome/browser/renderer_host/chrome_render_message_filter.cc +++ b/chrome/browser/renderer_host/chrome_render_message_filter.cc @@ -23,8 +23,8 @@ #include "content/public/browser/render_process_host.h" #if defined(ENABLE_EXTENSIONS) -#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h" -#include "chrome/browser/guest_view/web_view/web_view_renderer_state.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" +#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #endif #if defined(ENABLE_TASK_MANAGER) diff --git a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc index 3514461..81b8088 100644 --- a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc +++ b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc @@ -62,8 +62,8 @@ #include "chrome/browser/apps/ephemeral_app_throttle.h" #include "chrome/browser/extensions/api/streams_private/streams_private_api.h" #include "chrome/browser/extensions/user_script_listener.h" -#include "chrome/browser/guest_view/web_view/web_view_renderer_state.h" #include "chrome/common/extensions/manifest_handlers/mime_types_handler.h" +#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #include "extensions/browser/info_map.h" #include "extensions/common/constants.h" #include "extensions/common/user_script.h" diff --git a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm index ab7989b..387328e 100644 --- a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm +++ b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm @@ -5,7 +5,6 @@ #include "chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h" #include "base/logging.h" -#include "chrome/browser/guest_view/web_view/web_view_guest.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_window.h" #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_sheet.h" @@ -15,6 +14,7 @@ #include "components/web_modal/web_contents_modal_dialog_manager.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" using web_modal::WebContentsModalDialogManager; using web_modal::NativeWebContentsModalDialog; diff --git a/chrome/browser/ui/views/constrained_window_views.cc b/chrome/browser/ui/views/constrained_window_views.cc index c95f31b..658e32c 100644 --- a/chrome/browser/ui/views/constrained_window_views.cc +++ b/chrome/browser/ui/views/constrained_window_views.cc @@ -6,10 +6,10 @@ #include <algorithm> -#include "chrome/browser/guest_view/web_view/web_view_guest.h" #include "chrome/browser/ui/browser_finder.h" #include "components/web_modal/popup_manager.h" #include "components/web_modal/web_contents_modal_dialog_host.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" #include "ui/views/border.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_observer.h" diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 62a37c3..b72faf8 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -1484,25 +1484,12 @@ 'browser/guest_view/extension_options/extension_options_guest.h', 'browser/guest_view/app_view/chrome_app_view_guest_delegate.cc', 'browser/guest_view/app_view/chrome_app_view_guest_delegate.h', - 'browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.cc', - 'browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.h', 'browser/guest_view/web_view/chrome_web_view_guest_delegate.cc', 'browser/guest_view/web_view/chrome_web_view_guest_delegate.h', + 'browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.cc', + 'browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.h', 'browser/guest_view/web_view/context_menu_content_type_web_view.cc', 'browser/guest_view/web_view/context_menu_content_type_web_view.h', - 'browser/guest_view/web_view/javascript_dialog_helper.cc', - 'browser/guest_view/web_view/javascript_dialog_helper.h', - 'browser/guest_view/web_view/web_view_constants.cc', - 'browser/guest_view/web_view/web_view_constants.h', - 'browser/guest_view/web_view/web_view_find_helper.cc', - 'browser/guest_view/web_view/web_view_find_helper.h', - 'browser/guest_view/web_view/web_view_guest.cc', - 'browser/guest_view/web_view/web_view_guest.h', - 'browser/guest_view/web_view/web_view_permission_types.h', - 'browser/guest_view/web_view/web_view_permission_helper.cc', - 'browser/guest_view/web_view/web_view_permission_helper.h', - 'browser/guest_view/web_view/web_view_renderer_state.cc', - 'browser/guest_view/web_view/web_view_renderer_state.h', 'browser/infobars/infobar_extension_api.cc', 'browser/infobars/infobar_extension_api.h', 'browser/metrics/extensions_metrics_provider.cc', diff --git a/extensions/browser/api/extensions_api_client.cc b/extensions/browser/api/extensions_api_client.cc index 1e0c6d5..b75428d 100644 --- a/extensions/browser/api/extensions_api_client.cc +++ b/extensions/browser/api/extensions_api_client.cc @@ -51,4 +51,15 @@ device::HidService* ExtensionsAPIClient::GetHidService() { return NULL; } +WebViewGuestDelegate* ExtensionsAPIClient::CreateWebViewGuestDelegate( + WebViewGuest* web_view_guest) const { + return NULL; +} + +WebViewPermissionHelperDelegate* ExtensionsAPIClient:: + CreateWebViewPermissionHelperDelegate( + WebViewPermissionHelper* web_view_permission_helper) const { + return NULL; +} + } // namespace extensions diff --git a/extensions/browser/api/extensions_api_client.h b/extensions/browser/api/extensions_api_client.h index 93fae57..4a60df5 100644 --- a/extensions/browser/api/extensions_api_client.h +++ b/extensions/browser/api/extensions_api_client.h @@ -26,6 +26,10 @@ class HidService; namespace extensions { class AppViewGuestDelegate; +class WebViewGuest; +class WebViewGuestDelegate; +class WebViewPermissionHelper; +class WebViewPermissionHelperDelegate; class SettingsObserver; class SettingsStorageFactory; class ValueStoreCache; @@ -75,6 +79,17 @@ class ExtensionsAPIClient { // Returns the HidService instance for this embedder. virtual device::HidService* GetHidService(); + // Returns a delegate for some of WebViewGuest's behavior. The caller owns the + // returned WebViewGuestDelegate. + virtual WebViewGuestDelegate* CreateWebViewGuestDelegate ( + WebViewGuest* web_view_guest) const; + + // Returns a delegate for some of WebViewPermissionHelper's behavior. The + // caller owns the returned WebViewPermissionHelperDelegate. + virtual WebViewPermissionHelperDelegate* + CreateWebViewPermissionHelperDelegate ( + WebViewPermissionHelper* web_view_permission_helper) const; + virtual void RegisterGuestViewTypes() {} // NOTE: If this interface gains too many methods (perhaps more than 20) it diff --git a/extensions/browser/guest_view/DEPS b/extensions/browser/guest_view/DEPS new file mode 100644 index 0000000..f7e30da --- /dev/null +++ b/extensions/browser/guest_view/DEPS @@ -0,0 +1,5 @@ +include_rules = [ + # TODO(hanxi): Remove these. http://crbug.com/352293. + "+chrome/browser/extensions/api/web_view/web_view_internal_api.h", + "+third_party/WebKit/public/web/WebFindOptions.h", +] diff --git a/extensions/browser/guest_view/guest_view_base.cc b/extensions/browser/guest_view/guest_view_base.cc index ffb2e02..cdf9f0a 100644 --- a/extensions/browser/guest_view/guest_view_base.cc +++ b/extensions/browser/guest_view/guest_view_base.cc @@ -14,8 +14,10 @@ #include "extensions/browser/api/extensions_api_client.h" #include "extensions/browser/event_router.h" #include "extensions/browser/extension_registry.h" +#include "extensions/browser/guest_view/app_view/app_view_guest.h" #include "extensions/browser/guest_view/guest_view_constants.h" #include "extensions/browser/guest_view/guest_view_manager.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" #include "extensions/browser/process_map.h" #include "extensions/common/features/feature.h" #include "extensions/common/features/feature_provider.h" @@ -442,6 +444,8 @@ void GuestViewBase::CompleteInit(const std::string& embedder_extension_id, // static void GuestViewBase::RegisterGuestViewTypes() { + AppViewGuest::Register(); + WebViewGuest::Register(); ExtensionsAPIClient::Get()->RegisterGuestViewTypes(); } diff --git a/chrome/browser/guest_view/web_view/javascript_dialog_helper.cc b/extensions/browser/guest_view/web_view/javascript_dialog_helper.cc index 6fe90b1..1ee2f7f 100644 --- a/chrome/browser/guest_view/web_view/javascript_dialog_helper.cc +++ b/extensions/browser/guest_view/web_view/javascript_dialog_helper.cc @@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/guest_view/web_view/javascript_dialog_helper.h" +#include "extensions/browser/guest_view/web_view/javascript_dialog_helper.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" -#include "chrome/browser/guest_view/web_view/web_view_constants.h" -#include "chrome/browser/guest_view/web_view/web_view_guest.h" -#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h" -#include "chrome/browser/guest_view/web_view/web_view_permission_types.h" #include "extensions/browser/guest_view/guest_view_constants.h" +#include "extensions/browser/guest_view/web_view/web_view_constants.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_types.h" namespace extensions { diff --git a/chrome/browser/guest_view/web_view/javascript_dialog_helper.h b/extensions/browser/guest_view/web_view/javascript_dialog_helper.h index 654b0a2..d9ceee9 100644 --- a/chrome/browser/guest_view/web_view/javascript_dialog_helper.h +++ b/extensions/browser/guest_view/web_view/javascript_dialog_helper.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_JAVASCRIPT_DIALOG_HELPER_H_ -#define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_JAVASCRIPT_DIALOG_HELPER_H_ +#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_JAVASCRIPT_DIALOG_HELPER_H_ +#define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_JAVASCRIPT_DIALOG_HELPER_H_ #include "content/public/browser/javascript_dialog_manager.h" @@ -54,4 +54,4 @@ class JavaScriptDialogHelper : public content::JavaScriptDialogManager { } // namespace extensions -#endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_JAVASCRIPT_DIALOG_HELPER_H_ +#endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_JAVASCRIPT_DIALOG_HELPER_H_ diff --git a/chrome/browser/guest_view/web_view/web_view_constants.cc b/extensions/browser/guest_view/web_view/web_view_constants.cc index a93e363..93ab4cc 100644 --- a/chrome/browser/guest_view/web_view/web_view_constants.cc +++ b/extensions/browser/guest_view/web_view/web_view_constants.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/guest_view/web_view/web_view_constants.h" +#include "extensions/browser/guest_view/web_view/web_view_constants.h" namespace webview { diff --git a/chrome/browser/guest_view/web_view/web_view_constants.h b/extensions/browser/guest_view/web_view/web_view_constants.h index e28d59d..c398b5d 100644 --- a/chrome/browser/guest_view/web_view/web_view_constants.h +++ b/extensions/browser/guest_view/web_view/web_view_constants.h @@ -4,8 +4,8 @@ // Constants used for the WebView API. -#ifndef CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_CONSTANTS_H_ -#define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_CONSTANTS_H_ +#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_CONSTANTS_H_ +#define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_CONSTANTS_H_ namespace webview { @@ -115,4 +115,4 @@ extern const int kInvalidPermissionRequestID; } // namespace webview -#endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_CONSTANTS_H_ +#endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_CONSTANTS_H_ diff --git a/chrome/browser/guest_view/web_view/web_view_find_helper.cc b/extensions/browser/guest_view/web_view/web_view_find_helper.cc index 16d5a92..e7b7730 100644 --- a/chrome/browser/guest_view/web_view/web_view_find_helper.cc +++ b/extensions/browser/guest_view/web_view/web_view_find_helper.cc @@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/guest_view/web_view/web_view_find_helper.h" +#include "extensions/browser/guest_view/web_view/web_view_find_helper.h" #include <utility> #include "chrome/browser/extensions/api/web_view/web_view_internal_api.h" -#include "chrome/browser/guest_view/web_view/web_view_constants.h" +#include "extensions/browser/guest_view/web_view/web_view_constants.h" namespace extensions { diff --git a/chrome/browser/guest_view/web_view/web_view_find_helper.h b/extensions/browser/guest_view/web_view/web_view_find_helper.h index b257a72..425b440 100644 --- a/chrome/browser/guest_view/web_view/web_view_find_helper.h +++ b/extensions/browser/guest_view/web_view/web_view_find_helper.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_FIND_HELPER_H_ -#define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_FIND_HELPER_H_ +#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_FIND_HELPER_H_ +#define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_FIND_HELPER_H_ #include <map> #include <vector> @@ -187,4 +187,4 @@ class WebViewFindHelper { } // namespace extensions -#endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_FIND_HELPER_H_ +#endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_FIND_HELPER_H_ diff --git a/chrome/browser/guest_view/web_view/web_view_guest.cc b/extensions/browser/guest_view/web_view/web_view_guest.cc index 98a606b..5eaf6b4 100644 --- a/chrome/browser/guest_view/web_view/web_view_guest.cc +++ b/extensions/browser/guest_view/web_view/web_view_guest.cc @@ -2,18 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/guest_view/web_view/web_view_guest.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" #include "base/message_loop/message_loop.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/extensions/api/web_request/web_request_api.h" #include "chrome/browser/extensions/api/web_view/web_view_internal_api.h" -#include "chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.h" -#include "chrome/browser/guest_view/web_view/web_view_constants.h" -#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h" -#include "chrome/browser/guest_view/web_view/web_view_permission_types.h" -#include "chrome/browser/guest_view/web_view/web_view_renderer_state.h" +#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/native_web_keyboard_event.h" @@ -35,15 +30,19 @@ #include "content/public/common/result_codes.h" #include "content/public/common/stop_find_action.h" #include "content/public/common/url_constants.h" +#include "extensions/browser/api/extensions_api_client.h" #include "extensions/browser/extension_system.h" #include "extensions/browser/guest_view/guest_view_constants.h" #include "extensions/browser/guest_view/guest_view_manager.h" +#include "extensions/browser/guest_view/web_view/web_view_constants.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_types.h" +#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #include "extensions/common/constants.h" #include "extensions/common/extension_messages.h" #include "ipc/ipc_message_macros.h" #include "net/base/escape.h" #include "net/base/net_errors.h" -#include "third_party/WebKit/public/web/WebFindOptions.h" #include "ui/base/models/simple_menu_model.h" using base::UserMetricsAction; @@ -102,19 +101,6 @@ std::string GetStoragePartitionIdFromSiteURL(const GURL& site_url) { return (persist_storage ? webview::kPersistPrefix : "") + partition_id; } -void RemoveWebViewEventListenersOnIOThread( - void* profile, - const std::string& extension_id, - int embedder_process_id, - int view_instance_id) { - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); - ExtensionWebRequestEventRouter::GetInstance()->RemoveWebViewEventListeners( - profile, - extension_id, - embedder_process_id, - view_instance_id); -} - void ParsePartitionParam(const base::DictionaryValue& create_params, std::string* storage_partition_id, bool* persist_storage) { @@ -325,21 +311,8 @@ void WebViewGuest::DidStopLoading() { } void WebViewGuest::EmbedderDestroyed() { - // TODO(fsamuel): WebRequest event listeners for <webview> should survive - // reparenting of a <webview> within a single embedder. Right now, we keep - // around the browser state for the listener for the lifetime of the embedder. - // Ideally, the lifetime of the listeners should match the lifetime of the - // <webview> DOM node. Once http://crbug.com/156219 is resolved we can move - // the call to RemoveWebViewEventListenersOnIOThread back to - // WebViewGuest::WebContentsDestroyed. - content::BrowserThread::PostTask( - content::BrowserThread::IO, - FROM_HERE, - base::Bind( - &RemoveWebViewEventListenersOnIOThread, - browser_context(), embedder_extension_id(), - embedder_render_process_id(), - view_instance_id())); + if (web_view_guest_delegate_) + web_view_guest_delegate_->OnEmbedderDestroyed(); } void WebViewGuest::GuestDestroyed() { @@ -636,7 +609,8 @@ WebViewGuest::WebViewGuest(content::BrowserContext* browser_context, is_overriding_user_agent_(false), find_helper_(this), javascript_dialog_helper_(this) { - web_view_guest_delegate_.reset(new ChromeWebViewGuestDelegate(this)); + web_view_guest_delegate_.reset( + ExtensionsAPIClient::Get()->CreateWebViewGuestDelegate(this)); } WebViewGuest::~WebViewGuest() { diff --git a/chrome/browser/guest_view/web_view/web_view_guest.h b/extensions/browser/guest_view/web_view/web_view_guest.h index ba0613f..a6a9206 100644 --- a/chrome/browser/guest_view/web_view/web_view_guest.h +++ b/extensions/browser/guest_view/web_view/web_view_guest.h @@ -2,23 +2,26 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ -#define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ +#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ +#define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ #include <vector> #include "base/observer_list.h" -#include "chrome/browser/guest_view/web_view/javascript_dialog_helper.h" -#include "chrome/browser/guest_view/web_view/web_view_find_helper.h" -#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h" -#include "chrome/browser/guest_view/web_view/web_view_permission_types.h" #include "content/public/browser/javascript_dialog_manager.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" #include "extensions/browser/guest_view/guest_view.h" +#include "extensions/browser/guest_view/web_view/javascript_dialog_helper.h" +#include "extensions/browser/guest_view/web_view/web_view_find_helper.h" #include "extensions/browser/guest_view/web_view/web_view_guest_delegate.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_types.h" #include "extensions/browser/script_executor.h" -#include "third_party/WebKit/public/web/WebFindOptions.h" + +namespace blink { +struct WebFindOptions; +} // nanespace blink namespace extensions { @@ -357,4 +360,4 @@ class WebViewGuest : public GuestView<WebViewGuest>, } // namespace extensions -#endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ +#endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_ diff --git a/extensions/browser/guest_view/web_view/web_view_guest_delegate.cc b/extensions/browser/guest_view/web_view/web_view_guest_delegate.cc index d651212..f91ebce 100644 --- a/extensions/browser/guest_view/web_view/web_view_guest_delegate.cc +++ b/extensions/browser/guest_view/web_view/web_view_guest_delegate.cc @@ -6,7 +6,8 @@ namespace extensions { -WebViewGuestDelegate::WebViewGuestDelegate() { +WebViewGuestDelegate::WebViewGuestDelegate(WebViewGuest* web_view_guest) + : web_view_guest_(web_view_guest) { } WebViewGuestDelegate::~WebViewGuestDelegate() { diff --git a/extensions/browser/guest_view/web_view/web_view_guest_delegate.h b/extensions/browser/guest_view/web_view/web_view_guest_delegate.h index d72ae0e..0b54e72 100644 --- a/extensions/browser/guest_view/web_view/web_view_guest_delegate.h +++ b/extensions/browser/guest_view/web_view/web_view_guest_delegate.h @@ -14,6 +14,8 @@ class WebContents; namespace extensions { +class WebViewGuest; + namespace api { namespace web_view_internal{ @@ -25,7 +27,7 @@ struct ContextMenuItem; // A delegate class of WebViewGuest that are not a part of chrome. class WebViewGuestDelegate { public : - WebViewGuestDelegate(); + explicit WebViewGuestDelegate(WebViewGuest* web_view_guest); virtual ~WebViewGuestDelegate(); typedef std::vector<linked_ptr<api::web_view_internal::ContextMenuItem> > @@ -40,6 +42,9 @@ class WebViewGuestDelegate { // Called to attach helpers just after additional initialization is performed. virtual void OnAttachWebViewHelpers(content::WebContents* contents) = 0; + // Called to perform some cleanup prior to destruction. + virtual void OnEmbedderDestroyed() = 0; + // Called when the guest WebContents commits a provisional load in any frame. virtual void OnDidCommitProvisionalLoadForFrame(bool is_main_frame) = 0; @@ -63,7 +68,11 @@ class WebViewGuestDelegate { int request_id, const MenuItemVector* items) = 0; + WebViewGuest* web_view_guest() const { return web_view_guest_; } + private: + WebViewGuest* const web_view_guest_; + DISALLOW_COPY_AND_ASSIGN(WebViewGuestDelegate); }; diff --git a/chrome/browser/guest_view/web_view/web_view_permission_helper.cc b/extensions/browser/guest_view/web_view/web_view_permission_helper.cc index d3fc3a9..50e1911 100644 --- a/chrome/browser/guest_view/web_view/web_view_permission_helper.cc +++ b/extensions/browser/guest_view/web_view/web_view_permission_helper.cc @@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" -#include "chrome/browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.h" -#include "chrome/browser/guest_view/web_view/web_view_constants.h" -#include "chrome/browser/guest_view/web_view/web_view_guest.h" -#include "chrome/browser/guest_view/web_view/web_view_permission_types.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/user_metrics.h" +#include "extensions/browser/api/extensions_api_client.h" +#include "extensions/browser/guest_view/web_view/web_view_constants.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" #include "extensions/browser/guest_view/web_view/web_view_permission_helper_delegate.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_types.h" using content::BrowserPluginGuestDelegate; using content::RenderViewHost; @@ -134,10 +134,9 @@ WebViewPermissionHelper::WebViewPermissionHelper(WebViewGuest* web_view_guest) next_permission_request_id_(guestview::kInstanceIDNone), web_view_guest_(web_view_guest), weak_factory_(this) { - // TODO(hanxi) : Create the delegate through ExtensionsAPIClient after - // moving WebViewPermissionHelper to extensions. web_view_permission_helper_delegate_.reset( - new ChromeWebViewPermissionHelperDelegate(this)); + ExtensionsAPIClient::Get()->CreateWebViewPermissionHelperDelegate( + this)); } WebViewPermissionHelper::~WebViewPermissionHelper() { diff --git a/chrome/browser/guest_view/web_view/web_view_permission_helper.h b/extensions/browser/guest_view/web_view/web_view_permission_helper.h index 59e7221..161d550 100644 --- a/chrome/browser/guest_view/web_view/web_view_permission_helper.h +++ b/extensions/browser/guest_view/web_view/web_view_permission_helper.h @@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_PERMISSION_HELPER_H_ -#define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_PERMISSION_HELPER_H_ +#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_PERMISSION_HELPER_H_ +#define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_PERMISSION_HELPER_H_ #include "base/memory/weak_ptr.h" #include "base/metrics/user_metrics_action.h" -#include "chrome/browser/guest_view/web_view/web_view_permission_types.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/common/media_stream_request.h" #include "extensions/browser/guest_view/guest_view_constants.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_types.h" using base::UserMetricsAction; @@ -146,10 +146,10 @@ class WebViewPermissionHelper WebViewPermissionHelper::RequestMap pending_permission_requests_; - scoped_ptr<extensions::WebViewPermissionHelperDelegate> + scoped_ptr<WebViewPermissionHelperDelegate> web_view_permission_helper_delegate_; - WebViewGuest* web_view_guest_; + WebViewGuest* const web_view_guest_; base::WeakPtrFactory<WebViewPermissionHelper> weak_factory_; @@ -158,4 +158,4 @@ class WebViewPermissionHelper } // namespace extensions -#endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_PERMISSION_HELPER_H_ +#endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_PERMISSION_HELPER_H_ diff --git a/extensions/browser/guest_view/web_view/web_view_permission_helper_delegate.cc b/extensions/browser/guest_view/web_view/web_view_permission_helper_delegate.cc index d53d64d..47b7302 100644 --- a/extensions/browser/guest_view/web_view/web_view_permission_helper_delegate.cc +++ b/extensions/browser/guest_view/web_view/web_view_permission_helper_delegate.cc @@ -4,11 +4,15 @@ #include "extensions/browser/guest_view/web_view/web_view_permission_helper_delegate.h" +#include "extensions/browser/guest_view/web_view/web_view_guest.h" + namespace extensions { WebViewPermissionHelperDelegate::WebViewPermissionHelperDelegate( - content::WebContents* contents) - : content::WebContentsObserver(contents) { + WebViewPermissionHelper* web_view_permission_helper) + : content::WebContentsObserver( + web_view_permission_helper->web_view_guest()->guest_web_contents()), + web_view_permission_helper_(web_view_permission_helper) { } WebViewPermissionHelperDelegate::~WebViewPermissionHelperDelegate() { diff --git a/extensions/browser/guest_view/web_view/web_view_permission_helper_delegate.h b/extensions/browser/guest_view/web_view/web_view_permission_helper_delegate.h index ac0aefc..b43b73a 100644 --- a/extensions/browser/guest_view/web_view/web_view_permission_helper_delegate.h +++ b/extensions/browser/guest_view/web_view/web_view_permission_helper_delegate.h @@ -8,6 +8,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/common/media_stream_request.h" +#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" namespace extensions { @@ -15,7 +16,8 @@ namespace extensions { // not a part of extensions. class WebViewPermissionHelperDelegate : public content::WebContentsObserver { public: - explicit WebViewPermissionHelperDelegate(content::WebContents* contents); + explicit WebViewPermissionHelperDelegate( + WebViewPermissionHelper* web_view_permission_helper); virtual ~WebViewPermissionHelperDelegate(); virtual void RequestMediaAccessPermission( @@ -83,7 +85,13 @@ class WebViewPermissionHelperDelegate : public content::WebContentsObserver { bool blocked_by_policy, IPC::Message* reply_msg) {} + WebViewPermissionHelper* web_view_permission_helper() const { + return web_view_permission_helper_; + } + private: + WebViewPermissionHelper* const web_view_permission_helper_; + DISALLOW_COPY_AND_ASSIGN(WebViewPermissionHelperDelegate); }; diff --git a/chrome/browser/guest_view/web_view/web_view_permission_types.h b/extensions/browser/guest_view/web_view/web_view_permission_types.h index 22d8cf6..e520053 100644 --- a/chrome/browser/guest_view/web_view/web_view_permission_types.h +++ b/extensions/browser/guest_view/web_view/web_view_permission_types.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_PERMISSION_TYPES_H_ -#define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_PERMISSION_TYPES_H_ +#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_PERMISSION_TYPES_H_ +#define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_PERMISSION_TYPES_H_ enum WebViewPermissionType { // Unknown type of permission request. @@ -35,4 +35,4 @@ enum WebViewPermissionType { WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK }; -#endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_PERMISSION_TYPES_H_ +#endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_PERMISSION_TYPES_H_ diff --git a/chrome/browser/guest_view/web_view/web_view_renderer_state.cc b/extensions/browser/guest_view/web_view/web_view_renderer_state.cc index 89c0f6e..1687912 100644 --- a/chrome/browser/guest_view/web_view/web_view_renderer_state.cc +++ b/extensions/browser/guest_view/web_view/web_view_renderer_state.cc @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/guest_view/web_view/web_view_renderer_state.h" #include "content/public/browser/browser_thread.h" +#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" using content::BrowserThread; diff --git a/chrome/browser/guest_view/web_view/web_view_renderer_state.h b/extensions/browser/guest_view/web_view/web_view_renderer_state.h index ab785e7..a6e5f43 100644 --- a/chrome/browser/guest_view/web_view/web_view_renderer_state.h +++ b/extensions/browser/guest_view/web_view/web_view_renderer_state.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_RENDERER_STATE_H_ -#define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_RENDERER_STATE_H_ +#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_RENDERER_STATE_H_ +#define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_RENDERER_STATE_H_ #include <map> #include <string> @@ -74,4 +74,4 @@ class WebViewRendererState { } // namespace extensions -#endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_RENDERER_STATE_H_ +#endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_RENDERER_STATE_H_ diff --git a/extensions/extensions.gyp b/extensions/extensions.gyp index ed27973..317ab92 100644 --- a/extensions/extensions.gyp +++ b/extensions/extensions.gyp @@ -461,6 +461,12 @@ 'browser/external_provider_interface.h', 'browser/granted_file_entry.cc', 'browser/granted_file_entry.h', + 'browser/guest_view/app_view/app_view_constants.cc', + 'browser/guest_view/app_view/app_view_constants.h', + 'browser/guest_view/app_view/app_view_guest.cc', + 'browser/guest_view/app_view/app_view_guest.h', + 'browser/guest_view/app_view/app_view_guest_delegate.cc', + 'browser/guest_view/app_view/app_view_guest_delegate.h', 'browser/guest_view/guest_view_base.cc', 'browser/guest_view/guest_view_base.h', 'browser/guest_view/guest_view_constants.cc', @@ -469,16 +475,23 @@ 'browser/guest_view/guest_view_manager.cc', 'browser/guest_view/guest_view_manager.h', 'browser/guest_view/guest_view.h', - 'browser/guest_view/app_view/app_view_constants.cc', - 'browser/guest_view/app_view/app_view_constants.h', - 'browser/guest_view/app_view/app_view_guest.cc', - 'browser/guest_view/app_view/app_view_guest.h', - 'browser/guest_view/app_view/app_view_guest_delegate.cc', - 'browser/guest_view/app_view/app_view_guest_delegate.h', - 'browser/guest_view/web_view/web_view_permission_helper_delegate.cc', - 'browser/guest_view/web_view/web_view_permission_helper_delegate.h', + 'browser/guest_view/web_view/javascript_dialog_helper.cc', + 'browser/guest_view/web_view/javascript_dialog_helper.h', + 'browser/guest_view/web_view/web_view_constants.cc', + 'browser/guest_view/web_view/web_view_constants.h', + 'browser/guest_view/web_view/web_view_find_helper.cc', + 'browser/guest_view/web_view/web_view_find_helper.h', + 'browser/guest_view/web_view/web_view_guest.cc', + 'browser/guest_view/web_view/web_view_guest.h', 'browser/guest_view/web_view/web_view_guest_delegate.cc', 'browser/guest_view/web_view/web_view_guest_delegate.h', + 'browser/guest_view/web_view/web_view_permission_types.h', + 'browser/guest_view/web_view/web_view_permission_helper.cc', + 'browser/guest_view/web_view/web_view_permission_helper.h', + 'browser/guest_view/web_view/web_view_permission_helper_delegate.cc', + 'browser/guest_view/web_view/web_view_permission_helper_delegate.h', + 'browser/guest_view/web_view/web_view_renderer_state.cc', + 'browser/guest_view/web_view/web_view_renderer_state.h', 'browser/image_loader.cc', 'browser/image_loader.h', 'browser/image_loader_factory.cc', |