Commit 38c80c1b authored by ericzeng's avatar ericzeng Committed by Commit bot

Move ExtensionOptionsGuest code from chrome to extensions

Move embedded extension options guest view files from
chrome/browser/guest_view/extension_options/ to
extensions/browser/guest_view/extension_options. Also add a
ExtensionOptionsGuestDelegate in chrome/ to handle certain tasks, like
opening tabs and handling context menus, which cannot be run from
within extensions/.

This move makes the extension_options codebase more consistent with the
other guest views, which are organized similarly.

BUG=409316

Review URL: https://codereview.chromium.org/556563003

Cr-Commit-Position: refs/heads/master@{#294326}
parent d589cbb0
...@@ -8,13 +8,12 @@ ...@@ -8,13 +8,12 @@
#include "chrome/browser/extensions/api/declarative/rules_registry_service.h" #include "chrome/browser/extensions/api/declarative/rules_registry_service.h"
#include "chrome/browser/extensions/api/storage/sync_value_store_cache.h" #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/app_view/chrome_app_view_guest_delegate.h"
#include "chrome/browser/guest_view/extension_options/extension_options_guest.h" #include "chrome/browser/guest_view/extension_options/chrome_extension_options_guest_delegate.h"
#include "chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.h" #include "chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.h"
#include "chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.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 "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_context.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.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_guest.h"
#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" #include "extensions/browser/guest_view/web_view/web_view_permission_helper.h"
...@@ -49,6 +48,11 @@ AppViewGuestDelegate* ChromeExtensionsAPIClient::CreateAppViewGuestDelegate() ...@@ -49,6 +48,11 @@ AppViewGuestDelegate* ChromeExtensionsAPIClient::CreateAppViewGuestDelegate()
return new ChromeAppViewGuestDelegate(); return new ChromeAppViewGuestDelegate();
} }
ExtensionOptionsGuestDelegate*
ChromeExtensionsAPIClient::CreateExtensionOptionsGuestDelegate() const {
return new ChromeExtensionOptionsGuestDelegate();
}
scoped_ptr<MimeHandlerViewGuestDelegate> scoped_ptr<MimeHandlerViewGuestDelegate>
ChromeExtensionsAPIClient::CreateMimeHandlerViewGuestDelegate( ChromeExtensionsAPIClient::CreateMimeHandlerViewGuestDelegate(
MimeHandlerViewGuest* guest) const { MimeHandlerViewGuest* guest) const {
...@@ -68,10 +72,6 @@ WebViewPermissionHelperDelegate* ChromeExtensionsAPIClient:: ...@@ -68,10 +72,6 @@ WebViewPermissionHelperDelegate* ChromeExtensionsAPIClient::
return new ChromeWebViewPermissionHelperDelegate(web_view_permission_helper); return new ChromeWebViewPermissionHelperDelegate(web_view_permission_helper);
} }
void ChromeExtensionsAPIClient::RegisterGuestViewTypes() {
ExtensionOptionsGuest::Register();
}
scoped_refptr<RulesRegistry> ChromeExtensionsAPIClient::GetRulesRegistry( scoped_refptr<RulesRegistry> ChromeExtensionsAPIClient::GetRulesRegistry(
content::BrowserContext* browser_context, content::BrowserContext* browser_context,
const RulesRegistry::WebViewKey& webview_key, const RulesRegistry::WebViewKey& webview_key,
......
...@@ -24,6 +24,8 @@ class ChromeExtensionsAPIClient : public ExtensionsAPIClient { ...@@ -24,6 +24,8 @@ class ChromeExtensionsAPIClient : public ExtensionsAPIClient {
std::map<settings_namespace::Namespace, ValueStoreCache*>* caches) std::map<settings_namespace::Namespace, ValueStoreCache*>* caches)
OVERRIDE; OVERRIDE;
virtual AppViewGuestDelegate* CreateAppViewGuestDelegate() const OVERRIDE; virtual AppViewGuestDelegate* CreateAppViewGuestDelegate() const OVERRIDE;
virtual ExtensionOptionsGuestDelegate* CreateExtensionOptionsGuestDelegate()
const OVERRIDE;
virtual scoped_ptr<MimeHandlerViewGuestDelegate> virtual scoped_ptr<MimeHandlerViewGuestDelegate>
CreateMimeHandlerViewGuestDelegate( CreateMimeHandlerViewGuestDelegate(
MimeHandlerViewGuest* guest) const OVERRIDE; MimeHandlerViewGuest* guest) const OVERRIDE;
...@@ -32,7 +34,6 @@ class ChromeExtensionsAPIClient : public ExtensionsAPIClient { ...@@ -32,7 +34,6 @@ class ChromeExtensionsAPIClient : public ExtensionsAPIClient {
virtual WebViewPermissionHelperDelegate* virtual WebViewPermissionHelperDelegate*
CreateWebViewPermissionHelperDelegate( CreateWebViewPermissionHelperDelegate(
WebViewPermissionHelper* web_view_permission_helper) const OVERRIDE; WebViewPermissionHelper* web_view_permission_helper) const OVERRIDE;
virtual void RegisterGuestViewTypes() OVERRIDE;
virtual scoped_refptr<RulesRegistry> GetRulesRegistry( virtual scoped_refptr<RulesRegistry> GetRulesRegistry(
content::BrowserContext* browser_context, content::BrowserContext* browser_context,
const RulesRegistry::WebViewKey& webview_key, const RulesRegistry::WebViewKey& webview_key,
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// 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/extension_options/chrome_extension_options_guest_delegate.h"
#include "chrome/browser/extensions/chrome_extension_web_contents_observer.h"
#include "chrome/browser/renderer_context_menu/render_view_context_menu.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_finder.h"
#include "components/renderer_context_menu/context_menu_delegate.h"
namespace extensions {
ChromeExtensionOptionsGuestDelegate::ChromeExtensionOptionsGuestDelegate() {
}
ChromeExtensionOptionsGuestDelegate::~ChromeExtensionOptionsGuestDelegate() {
}
void
ChromeExtensionOptionsGuestDelegate::CreateChromeExtensionWebContentsObserver(
content::WebContents* web_contents) {
extensions::ChromeExtensionWebContentsObserver::CreateForWebContents(
web_contents);
}
bool ChromeExtensionOptionsGuestDelegate::HandleContextMenu(
content::WebContents* web_contents,
const content::ContextMenuParams& params) {
ContextMenuDelegate* menu_delegate =
ContextMenuDelegate::FromWebContents(web_contents);
DCHECK(menu_delegate);
scoped_ptr<RenderViewContextMenu> menu =
menu_delegate->BuildMenu(web_contents, params);
menu_delegate->ShowMenu(menu.Pass());
return true;
}
content::WebContents* ChromeExtensionOptionsGuestDelegate::OpenURLInNewTab(
content::WebContents* embedder_web_contents,
const content::OpenURLParams& params) {
Browser* browser = chrome::FindBrowserWithWebContents(embedder_web_contents);
return browser->OpenURL(params);
}
} // namespace extensions
// Copyright 2014 The Chromium Authors. All rights reserved.
// 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_EXTENSION_OPTIONS_CHROME_EXTENSION_OPTIONS_GUEST_DELEGATE_H_
#define CHROME_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_CHROME_EXTENSION_OPTIONS_GUEST_DELEGATE_H_
#include "extensions/browser/guest_view/extension_options/extension_options_guest_delegate.h"
#include "base/macros.h"
namespace extensions {
class ChromeExtensionOptionsGuestDelegate
: public ExtensionOptionsGuestDelegate {
public:
ChromeExtensionOptionsGuestDelegate();
virtual ~ChromeExtensionOptionsGuestDelegate();
virtual void CreateChromeExtensionWebContentsObserver(
content::WebContents* web_contents) OVERRIDE;
virtual bool HandleContextMenu(
content::WebContents* web_contents,
const content::ContextMenuParams& params) OVERRIDE;
virtual content::WebContents* OpenURLInNewTab(
content::WebContents* embedder_web_contents,
const content::OpenURLParams& params) OVERRIDE;
private:
DISALLOW_COPY_AND_ASSIGN(ChromeExtensionOptionsGuestDelegate);
};
} // namespace extensions
#endif // CHROME_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_CHROME_EXTENSION_OPTIONS_GUEST_DELEGATE_H_
...@@ -1435,12 +1435,10 @@ ...@@ -1435,12 +1435,10 @@
'browser/drive/drive_uploader.h', 'browser/drive/drive_uploader.h',
'browser/drive/event_logger.cc', 'browser/drive/event_logger.cc',
'browser/drive/event_logger.h', 'browser/drive/event_logger.h',
'browser/guest_view/extension_options/extension_options_constants.cc',
'browser/guest_view/extension_options/extension_options_constants.h',
'browser/guest_view/extension_options/extension_options_guest.cc',
'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.cc',
'browser/guest_view/app_view/chrome_app_view_guest_delegate.h', 'browser/guest_view/app_view/chrome_app_view_guest_delegate.h',
'browser/guest_view/extension_options/chrome_extension_options_guest_delegate.cc',
'browser/guest_view/extension_options/chrome_extension_options_guest_delegate.h',
'browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.cc', 'browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.cc',
'browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.h', 'browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.h',
'browser/guest_view/web_view/chrome_web_view_guest_delegate.cc', 'browser/guest_view/web_view/chrome_web_view_guest_delegate.cc',
......
...@@ -868,6 +868,7 @@ ...@@ -868,6 +868,7 @@
'../extensions/browser/api/usb/usb_apitest.cc', '../extensions/browser/api/usb/usb_apitest.cc',
'../extensions/browser/api/usb/usb_manual_apitest.cc', '../extensions/browser/api/usb/usb_manual_apitest.cc',
'../extensions/browser/app_window/app_window_browsertest.cc', '../extensions/browser/app_window/app_window_browsertest.cc',
'../extensions/browser/guest_view/extension_options/extension_options_apitest.cc',
'../extensions/browser/test_extension_registry_observer.h', '../extensions/browser/test_extension_registry_observer.h',
'../extensions/browser/test_extension_registry_observer.cc', '../extensions/browser/test_extension_registry_observer.cc',
'../extensions/renderer/script_context_browsertest.cc', '../extensions/renderer/script_context_browsertest.cc',
...@@ -1262,7 +1263,6 @@ ...@@ -1262,7 +1263,6 @@
'browser/first_run/try_chrome_dialog_view_browsertest.cc', 'browser/first_run/try_chrome_dialog_view_browsertest.cc',
'browser/geolocation/access_token_store_browsertest.cc', 'browser/geolocation/access_token_store_browsertest.cc',
'browser/geolocation/geolocation_browsertest.cc', 'browser/geolocation/geolocation_browsertest.cc',
'browser/guest_view/extension_options/extension_options_apitest.cc',
'browser/history/history_browsertest.cc', 'browser/history/history_browsertest.cc',
'browser/history/redirect_browsertest.cc', 'browser/history/redirect_browsertest.cc',
'browser/iframe_browsertest.cc', 'browser/iframe_browsertest.cc',
......
...@@ -44,7 +44,6 @@ ...@@ -44,7 +44,6 @@
'echo_private.json', 'echo_private.json',
'enterprise_platform_keys_private.json', 'enterprise_platform_keys_private.json',
'experience_sampling_private.json', 'experience_sampling_private.json',
'extension_options_internal.idl',
'feedback_private.idl', 'feedback_private.idl',
'file_manager_private.idl', 'file_manager_private.idl',
'file_manager_private_internal.idl', 'file_manager_private_internal.idl',
......
...@@ -312,6 +312,12 @@ source_set("browser") { ...@@ -312,6 +312,12 @@ source_set("browser") {
"guest_view/app_view/app_view_guest.h", "guest_view/app_view/app_view_guest.h",
"guest_view/app_view/app_view_guest_delegate.cc", "guest_view/app_view/app_view_guest_delegate.cc",
"guest_view/app_view/app_view_guest_delegate.h", "guest_view/app_view/app_view_guest_delegate.h",
"guest_view/extension_options/extension_options_constants.cc",
"guest_view/extension_options/extension_options_constants.h",
"guest_view/extension_options/extension_options_guest.cc",
"guest_view/extension_options/extension_options_guest.h",
"guest_view/extension_options/extension_options_guest_delegate.cc",
"guest_view/extension_options/extension_options_guest_delegate.h",
"guest_view/guest_view_base.cc", "guest_view/guest_view_base.cc",
"guest_view/guest_view_base.h", "guest_view/guest_view_base.h",
"guest_view/guest_view_constants.cc", "guest_view/guest_view_constants.cc",
......
...@@ -31,6 +31,11 @@ AppViewGuestDelegate* ExtensionsAPIClient::CreateAppViewGuestDelegate() const { ...@@ -31,6 +31,11 @@ AppViewGuestDelegate* ExtensionsAPIClient::CreateAppViewGuestDelegate() const {
return NULL; return NULL;
} }
ExtensionOptionsGuestDelegate*
ExtensionsAPIClient::CreateExtensionOptionsGuestDelegate() const {
return NULL;
}
scoped_ptr<MimeHandlerViewGuestDelegate> scoped_ptr<MimeHandlerViewGuestDelegate>
ExtensionsAPIClient::CreateMimeHandlerViewGuestDelegate( ExtensionsAPIClient::CreateMimeHandlerViewGuestDelegate(
MimeHandlerViewGuest* guest) const { MimeHandlerViewGuest* guest) const {
......
...@@ -24,6 +24,7 @@ class BrowserContext; ...@@ -24,6 +24,7 @@ class BrowserContext;
namespace extensions { namespace extensions {
class AppViewGuestDelegate; class AppViewGuestDelegate;
class ExtensionOptionsGuestDelegate;
class MimeHandlerViewGuest; class MimeHandlerViewGuest;
class MimeHandlerViewGuestDelegate; class MimeHandlerViewGuestDelegate;
class WebViewGuest; class WebViewGuest;
...@@ -61,6 +62,11 @@ class ExtensionsAPIClient { ...@@ -61,6 +62,11 @@ class ExtensionsAPIClient {
// Creates the AppViewGuestDelegate. // Creates the AppViewGuestDelegate.
virtual AppViewGuestDelegate* CreateAppViewGuestDelegate() const; virtual AppViewGuestDelegate* CreateAppViewGuestDelegate() const;
// Returns a delegate for ExtensionOptionsGuest. The caller owns the returned
// ExtensionOptionsGuestDelegate.
virtual ExtensionOptionsGuestDelegate* CreateExtensionOptionsGuestDelegate()
const;
// Creates a delegate for MimeHandlerViewGuest. // Creates a delegate for MimeHandlerViewGuest.
virtual scoped_ptr<MimeHandlerViewGuestDelegate> virtual scoped_ptr<MimeHandlerViewGuestDelegate>
CreateMimeHandlerViewGuestDelegate(MimeHandlerViewGuest* guest) const; CreateMimeHandlerViewGuestDelegate(MimeHandlerViewGuest* guest) const;
...@@ -76,8 +82,6 @@ class ExtensionsAPIClient { ...@@ -76,8 +82,6 @@ class ExtensionsAPIClient {
CreateWebViewPermissionHelperDelegate ( CreateWebViewPermissionHelperDelegate (
WebViewPermissionHelper* web_view_permission_helper) const; WebViewPermissionHelper* web_view_permission_helper) const;
virtual void RegisterGuestViewTypes() {}
// TODO(wjmaclean): Remove this as soon as rules_registry_service.* moves to // TODO(wjmaclean): Remove this as soon as rules_registry_service.* moves to
// extensions/browser/api/declarative/. // extensions/browser/api/declarative/.
virtual scoped_refptr<RulesRegistry> GetRulesRegistry( virtual scoped_refptr<RulesRegistry> GetRulesRegistry(
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/guest_view/extension_options/extension_options_constants.h" #include "extensions/browser/guest_view/extension_options/extension_options_constants.h"
namespace extensionoptions { namespace extensionoptions {
...@@ -23,5 +23,4 @@ const char kNewWidth[] = "newWidth"; ...@@ -23,5 +23,4 @@ const char kNewWidth[] = "newWidth";
const char kOldHeight[] = "oldHeight"; const char kOldHeight[] = "oldHeight";
const char kOldWidth[] = "oldWidth"; const char kOldWidth[] = "oldWidth";
} // namespace extensionoptions } // namespace extensionoptions
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef CHROME_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_CONSTANTS_H_ #ifndef EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_CONSTANTS_H_
#define CHROME_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_CONSTANTS_H_ #define EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_CONSTANTS_H_
namespace extensionoptions { namespace extensionoptions {
...@@ -27,4 +27,4 @@ extern const char kOldWidth[]; ...@@ -27,4 +27,4 @@ extern const char kOldWidth[];
} // namespace extensionoptions } // namespace extensionoptions
#endif // CHROME_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_CONSTANTS_H_ #endif // EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_CONSTANTS_H_
...@@ -2,27 +2,21 @@ ...@@ -2,27 +2,21 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/guest_view/extension_options/extension_options_guest.h" #include "extensions/browser/guest_view/extension_options/extension_options_guest.h"
#include "base/values.h" #include "base/values.h"
#include "chrome/browser/extensions/chrome_extension_web_contents_observer.h"
#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/guest_view/extension_options/extension_options_constants.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/renderer_context_menu/render_view_context_menu.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/extensions/api/extension_options_internal.h"
#include "components/crx_file/id_util.h" #include "components/crx_file/id_util.h"
#include "components/renderer_context_menu/context_menu_delegate.h"
#include "content/public/browser/render_process_host.h" #include "content/public/browser/render_process_host.h"
#include "content/public/browser/site_instance.h" #include "content/public/browser/site_instance.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "extensions/browser/api/extensions_api_client.h"
#include "extensions/browser/extension_function_dispatcher.h" #include "extensions/browser/extension_function_dispatcher.h"
#include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_web_contents_observer.h"
#include "extensions/browser/guest_view/extension_options/extension_options_constants.h"
#include "extensions/browser/guest_view/extension_options/extension_options_guest_delegate.h"
#include "extensions/browser/guest_view/guest_view_manager.h" #include "extensions/browser/guest_view/guest_view_manager.h"
#include "extensions/common/api/extension_options_internal.h"
#include "extensions/common/constants.h" #include "extensions/common/constants.h"
#include "extensions/common/extension.h" #include "extensions/common/extension.h"
#include "extensions/common/extension_messages.h" #include "extensions/common/extension_messages.h"
...@@ -33,7 +27,7 @@ ...@@ -33,7 +27,7 @@
#include "ipc/ipc_message_macros.h" #include "ipc/ipc_message_macros.h"
using content::WebContents; using content::WebContents;
using namespace extensions::api; using namespace extensions::core_api;
// static // static
const char ExtensionOptionsGuest::Type[] = "extensionoptions"; const char ExtensionOptionsGuest::Type[] = "extensionoptions";
...@@ -41,7 +35,10 @@ const char ExtensionOptionsGuest::Type[] = "extensionoptions"; ...@@ -41,7 +35,10 @@ const char ExtensionOptionsGuest::Type[] = "extensionoptions";
ExtensionOptionsGuest::ExtensionOptionsGuest( ExtensionOptionsGuest::ExtensionOptionsGuest(
content::BrowserContext* browser_context, content::BrowserContext* browser_context,
int guest_instance_id) int guest_instance_id)
: GuestView<ExtensionOptionsGuest>(browser_context, guest_instance_id) { : GuestView<ExtensionOptionsGuest>(browser_context, guest_instance_id),
extension_options_guest_delegate_(
extensions::ExtensionsAPIClient::Get()
->CreateExtensionOptionsGuestDelegate()) {
} }
ExtensionOptionsGuest::~ExtensionOptionsGuest() { ExtensionOptionsGuest::~ExtensionOptionsGuest() {
...@@ -117,15 +114,16 @@ void ExtensionOptionsGuest::DidAttachToEmbedder() { ...@@ -117,15 +114,16 @@ void ExtensionOptionsGuest::DidAttachToEmbedder() {
void ExtensionOptionsGuest::DidInitialize() { void ExtensionOptionsGuest::DidInitialize() {
extension_function_dispatcher_.reset( extension_function_dispatcher_.reset(
new extensions::ExtensionFunctionDispatcher(browser_context(), this)); new extensions::ExtensionFunctionDispatcher(browser_context(), this));
extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( if (extension_options_guest_delegate_) {
extension_options_guest_delegate_->CreateChromeExtensionWebContentsObserver(
web_contents()); web_contents());
}
} }
void ExtensionOptionsGuest::DidStopLoading() { void ExtensionOptionsGuest::DidStopLoading() {
scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
DispatchEventToEmbedder(new extensions::GuestViewBase::Event( DispatchEventToEmbedder(new extensions::GuestViewBase::Event(
extensions::api::extension_options_internal::OnLoad::kEventName, extension_options_internal::OnLoad::kEventName, args.Pass()));
args.Pass()));
} }
const char* ExtensionOptionsGuest::GetAPINamespace() const { const char* ExtensionOptionsGuest::GetAPINamespace() const {
...@@ -159,15 +157,16 @@ content::WebContents* ExtensionOptionsGuest::GetAssociatedWebContents() const { ...@@ -159,15 +157,16 @@ content::WebContents* ExtensionOptionsGuest::GetAssociatedWebContents() const {
content::WebContents* ExtensionOptionsGuest::OpenURLFromTab( content::WebContents* ExtensionOptionsGuest::OpenURLFromTab(
content::WebContents* source, content::WebContents* source,
const content::OpenURLParams& params) { const content::OpenURLParams& params) {
Browser* browser = if (!extension_options_guest_delegate_)
chrome::FindBrowserWithWebContents(embedder_web_contents()); return NULL;
// Don't allow external URLs with the CURRENT_TAB disposition be opened in // Don't allow external URLs with the CURRENT_TAB disposition be opened in
// this guest view, change the disposition to NEW_FOREGROUND_TAB. // this guest view, change the disposition to NEW_FOREGROUND_TAB.
if ((!params.url.SchemeIs(extensions::kExtensionScheme) || if ((!params.url.SchemeIs(extensions::kExtensionScheme) ||
params.url.host() != options_page_.host()) && params.url.host() != options_page_.host()) &&
params.disposition == CURRENT_TAB) { params.disposition == CURRENT_TAB) {
return browser->OpenURL( return extension_options_guest_delegate_->OpenURLInNewTab(
embedder_web_contents(),
content::OpenURLParams(params.url, content::OpenURLParams(params.url,
params.referrer, params.referrer,
params.frame_tree_node_id, params.frame_tree_node_id,
...@@ -175,7 +174,8 @@ content::WebContents* ExtensionOptionsGuest::OpenURLFromTab( ...@@ -175,7 +174,8 @@ content::WebContents* ExtensionOptionsGuest::OpenURLFromTab(
params.transition, params.transition,
params.is_renderer_initiated)); params.is_renderer_initiated));
} }
return browser->OpenURL(params); return extension_options_guest_delegate_->OpenURLInNewTab(
embedder_web_contents(), params);
} }
void ExtensionOptionsGuest::CloseContents(content::WebContents* source) { void ExtensionOptionsGuest::CloseContents(content::WebContents* source) {
...@@ -186,14 +186,11 @@ void ExtensionOptionsGuest::CloseContents(content::WebContents* source) { ...@@ -186,14 +186,11 @@ void ExtensionOptionsGuest::CloseContents(content::WebContents* source) {
bool ExtensionOptionsGuest::HandleContextMenu( bool ExtensionOptionsGuest::HandleContextMenu(
const content::ContextMenuParams& params) { const content::ContextMenuParams& params) {
ContextMenuDelegate* menu_delegate = if (!extension_options_guest_delegate_)
ContextMenuDelegate::FromWebContents(web_contents()); return false;
DCHECK(menu_delegate);
scoped_ptr<RenderViewContextMenu> menu = return extension_options_guest_delegate_->HandleContextMenu(web_contents(),
menu_delegate->BuildMenu(web_contents(), params); params);
menu_delegate->ShowMenu(menu.Pass());
return true;
} }
bool ExtensionOptionsGuest::ShouldCreateWebContents( bool ExtensionOptionsGuest::ShouldCreateWebContents(
...@@ -209,16 +206,17 @@ bool ExtensionOptionsGuest::ShouldCreateWebContents( ...@@ -209,16 +206,17 @@ bool ExtensionOptionsGuest::ShouldCreateWebContents(
// external links to be opened in a new tab, not in a new guest view. // external links to be opened in a new tab, not in a new guest view.
// Therefore we just open the URL in a new tab, and since we aren't handling // Therefore we just open the URL in a new tab, and since we aren't handling
// the new web contents, we return false. // the new web contents, we return false.
Browser* browser = // TODO(ericzeng): Open the tab in the background if the click was a
chrome::FindBrowserWithWebContents(embedder_web_contents()); // ctrl-click or middle mouse button click
content::OpenURLParams params(target_url, if (extension_options_guest_delegate_) {
extension_options_guest_delegate_->OpenURLInNewTab(
embedder_web_contents(),
content::OpenURLParams(target_url,
content::Referrer(), content::Referrer(),
NEW_FOREGROUND_TAB, NEW_FOREGROUND_TAB,
content::PAGE_TRANSITION_LINK, content::PAGE_TRANSITION_LINK,
false); false));
browser->OpenURL(params); }
// TODO(ericzeng): Open the tab in the background if the click was a
// ctrl-click or middle mouse button click
return false; return false;
} }
...@@ -233,8 +231,8 @@ bool ExtensionOptionsGuest::OnMessageReceived(const IPC::Message& message) { ...@@ -233,8 +231,8 @@ bool ExtensionOptionsGuest::OnMessageReceived(const IPC::Message& message) {
void ExtensionOptionsGuest::OnRequest( void ExtensionOptionsGuest::OnRequest(
const ExtensionHostMsg_Request_Params& params) { const ExtensionHostMsg_Request_Params& params) {
extension_function_dispatcher_->Dispatch( extension_function_dispatcher_->Dispatch(params,
params, web_contents()->GetRenderViewHost()); web_contents()->GetRenderViewHost());
} }
void ExtensionOptionsGuest::SetUpAutoSize() { void ExtensionOptionsGuest::SetUpAutoSize() {
......
...@@ -2,11 +2,12 @@ ...@@ -2,11 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef CHROME_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_H_ #ifndef EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_H_
#define CHROME_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_H_ #define EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_H_
#include "base/macros.h" #include "base/macros.h"
#include "extensions/browser/extension_function_dispatcher.h" #include "extensions/browser/extension_function_dispatcher.h"
#include "extensions/browser/guest_view/extension_options/extension_options_guest_delegate.h"
#include "extensions/browser/guest_view/guest_view.h" #include "extensions/browser/guest_view/guest_view.h"
#include "url/gurl.h" #include "url/gurl.h"
...@@ -20,7 +21,8 @@ class ExtensionOptionsGuest ...@@ -20,7 +21,8 @@ class ExtensionOptionsGuest
public: public:
static const char Type[]; static const char Type[];
static extensions::GuestViewBase* Create( static extensions::GuestViewBase* Create(
content::BrowserContext* browser_context, int guest_instance_id); content::BrowserContext* browser_context,
int guest_instance_id);
// GuestViewBase implementation. // GuestViewBase implementation.
virtual void CreateWebContents( virtual void CreateWebContents(
...@@ -69,9 +71,11 @@ class ExtensionOptionsGuest ...@@ -69,9 +71,11 @@ class ExtensionOptionsGuest
scoped_ptr<extensions::ExtensionFunctionDispatcher> scoped_ptr<extensions::ExtensionFunctionDispatcher>
extension_function_dispatcher_; extension_function_dispatcher_;
scoped_ptr<extensions::ExtensionOptionsGuestDelegate>
extension_options_guest_delegate_;
GURL options_page_; GURL options_page_;
DISALLOW_COPY_AND_ASSIGN(ExtensionOptionsGuest); DISALLOW_COPY_AND_ASSIGN(ExtensionOptionsGuest);
}; };
#endif // CHROME_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_H_ #endif // EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_H_
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "extensions/browser/guest_view/extension_options/extension_options_guest_delegate.h"
namespace extensions {
ExtensionOptionsGuestDelegate::~ExtensionOptionsGuestDelegate() {
}
} // namespace extensions
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_DELEGATE_H_
#define EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_DELEGATE_H_
namespace content {
struct ContextMenuParams;
struct OpenURLParams;
class WebContents;
}
namespace extensions {
// Interface to handle communication between ExtensionOptionsGuest (in
// extensions) with the browser.
class ExtensionOptionsGuestDelegate {
public:
virtual ~ExtensionOptionsGuestDelegate();
virtual void CreateChromeExtensionWebContentsObserver(
content::WebContents* web_contents) = 0;
// Shows the context menu for the guest.
// Returns true if the context menu was handled.
virtual bool HandleContextMenu(content::WebContents* web_contents,
const content::ContextMenuParams& params) = 0;
virtual content::WebContents* OpenURLInNewTab(
content::WebContents* embedder_web_contents,
const content::OpenURLParams& params) = 0;
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_DELEGATE_H_
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "extensions/browser/event_router.h" #include "extensions/browser/event_router.h"
#include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry.h"
#include "extensions/browser/guest_view/app_view/app_view_guest.h" #include "extensions/browser/guest_view/app_view/app_view_guest.h"
#include "extensions/browser/guest_view/extension_options/extension_options_guest.h"
#include "extensions/browser/guest_view/guest_view_constants.h" #include "extensions/browser/guest_view/guest_view_constants.h"
#include "extensions/browser/guest_view/guest_view_manager.h" #include "extensions/browser/guest_view/guest_view_manager.h"
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h" #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
...@@ -460,9 +461,9 @@ void GuestViewBase::CompleteInit(const std::string& embedder_extension_id, ...@@ -460,9 +461,9 @@ void GuestViewBase::CompleteInit(const std::string& embedder_extension_id,
// static // static
void GuestViewBase::RegisterGuestViewTypes() { void GuestViewBase::RegisterGuestViewTypes() {
AppViewGuest::Register(); AppViewGuest::Register();
ExtensionOptionsGuest::Register();
MimeHandlerViewGuest::Register(); MimeHandlerViewGuest::Register();
WebViewGuest::Register(); WebViewGuest::Register();
ExtensionsAPIClient::Get()->RegisterGuestViewTypes();
} }
} // namespace extensions } // namespace extensions
...@@ -238,6 +238,8 @@ source_set("common") { ...@@ -238,6 +238,8 @@ source_set("common") {
"extension_api.cc", "extension_api.cc",
"manifest_handlers/externally_connectable.cc", "manifest_handlers/externally_connectable.cc",
"manifest_handlers/externally_connectable.h", "manifest_handlers/externally_connectable.h",
"manifest_handlers/options_page_info.cc",
"manifest_handlers/options_page_info.h",
] ]
} }
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
'dns.idl', 'dns.idl',
'events.json', 'events.json',
'extensions_manifest_types.json', 'extensions_manifest_types.json',
'extension_options_internal.idl',
'extension_types.json', 'extension_types.json',
'guest_view_internal.json', 'guest_view_internal.json',
'hid.idl', 'hid.idl',
......
...@@ -576,6 +576,12 @@ ...@@ -576,6 +576,12 @@
'browser/guest_view/app_view/app_view_guest.h', '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.cc',
'browser/guest_view/app_view/app_view_guest_delegate.h', 'browser/guest_view/app_view/app_view_guest_delegate.h',
'browser/guest_view/extension_options/extension_options_constants.cc',
'browser/guest_view/extension_options/extension_options_constants.h',
'browser/guest_view/extension_options/extension_options_guest.cc',
'browser/guest_view/extension_options/extension_options_guest.h',
'browser/guest_view/extension_options/extension_options_guest_delegate.cc',
'browser/guest_view/extension_options/extension_options_guest_delegate.h',
'browser/guest_view/guest_view_base.cc', 'browser/guest_view/guest_view_base.cc',
'browser/guest_view/guest_view_base.h', 'browser/guest_view/guest_view_base.h',
'browser/guest_view/guest_view_constants.cc', 'browser/guest_view/guest_view_constants.cc',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment