Commit b34659d0 authored by ericzeng's avatar ericzeng Committed by Commit bot

Refactor ExtensionOptionsGuestDelegate to have an ExtensionOptionsGuest

Give the delegate class an ExtensionOptionsGuest member so that the
calls to the delegate do not require passing a WebContents.

BUG=409316

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

Cr-Commit-Position: refs/heads/master@{#294495}
parent 4e0be1f3
...@@ -49,8 +49,9 @@ AppViewGuestDelegate* ChromeExtensionsAPIClient::CreateAppViewGuestDelegate() ...@@ -49,8 +49,9 @@ AppViewGuestDelegate* ChromeExtensionsAPIClient::CreateAppViewGuestDelegate()
} }
ExtensionOptionsGuestDelegate* ExtensionOptionsGuestDelegate*
ChromeExtensionsAPIClient::CreateExtensionOptionsGuestDelegate() const { ChromeExtensionsAPIClient::CreateExtensionOptionsGuestDelegate(
return new ChromeExtensionOptionsGuestDelegate(); ExtensionOptionsGuest* guest) const {
return new ChromeExtensionOptionsGuestDelegate(guest);
} }
scoped_ptr<MimeHandlerViewGuestDelegate> scoped_ptr<MimeHandlerViewGuestDelegate>
......
...@@ -24,8 +24,8 @@ class ChromeExtensionsAPIClient : public ExtensionsAPIClient { ...@@ -24,8 +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() virtual ExtensionOptionsGuestDelegate* CreateExtensionOptionsGuestDelegate(
const OVERRIDE; ExtensionOptionsGuest* guest) const OVERRIDE;
virtual scoped_ptr<MimeHandlerViewGuestDelegate> virtual scoped_ptr<MimeHandlerViewGuestDelegate>
CreateMimeHandlerViewGuestDelegate( CreateMimeHandlerViewGuestDelegate(
MimeHandlerViewGuest* guest) const OVERRIDE; MimeHandlerViewGuest* guest) const OVERRIDE;
......
...@@ -9,39 +9,39 @@ ...@@ -9,39 +9,39 @@
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_finder.h"
#include "components/renderer_context_menu/context_menu_delegate.h" #include "components/renderer_context_menu/context_menu_delegate.h"
#include "extensions/browser/guest_view/extension_options/extension_options_guest.h"
namespace extensions { namespace extensions {
ChromeExtensionOptionsGuestDelegate::ChromeExtensionOptionsGuestDelegate() { ChromeExtensionOptionsGuestDelegate::ChromeExtensionOptionsGuestDelegate(
ExtensionOptionsGuest* guest)
: ExtensionOptionsGuestDelegate(guest) {
} }
ChromeExtensionOptionsGuestDelegate::~ChromeExtensionOptionsGuestDelegate() { ChromeExtensionOptionsGuestDelegate::~ChromeExtensionOptionsGuestDelegate() {
} }
void void ChromeExtensionOptionsGuestDelegate::DidInitialize() {
ChromeExtensionOptionsGuestDelegate::CreateChromeExtensionWebContentsObserver(
content::WebContents* web_contents) {
extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( extensions::ChromeExtensionWebContentsObserver::CreateForWebContents(
web_contents); extension_options_guest()->web_contents());
} }
bool ChromeExtensionOptionsGuestDelegate::HandleContextMenu( bool ChromeExtensionOptionsGuestDelegate::HandleContextMenu(
content::WebContents* web_contents,
const content::ContextMenuParams& params) { const content::ContextMenuParams& params) {
ContextMenuDelegate* menu_delegate = ContextMenuDelegate* menu_delegate = ContextMenuDelegate::FromWebContents(
ContextMenuDelegate::FromWebContents(web_contents); extension_options_guest()->web_contents());
DCHECK(menu_delegate); DCHECK(menu_delegate);
scoped_ptr<RenderViewContextMenu> menu = scoped_ptr<RenderViewContextMenu> menu = menu_delegate->BuildMenu(
menu_delegate->BuildMenu(web_contents, params); extension_options_guest()->web_contents(), params);
menu_delegate->ShowMenu(menu.Pass()); menu_delegate->ShowMenu(menu.Pass());
return true; return true;
} }
content::WebContents* ChromeExtensionOptionsGuestDelegate::OpenURLInNewTab( content::WebContents* ChromeExtensionOptionsGuestDelegate::OpenURLInNewTab(
content::WebContents* embedder_web_contents,
const content::OpenURLParams& params) { const content::OpenURLParams& params) {
Browser* browser = chrome::FindBrowserWithWebContents(embedder_web_contents); Browser* browser = chrome::FindBrowserWithWebContents(
extension_options_guest()->embedder_web_contents());
return browser->OpenURL(params); return browser->OpenURL(params);
} }
......
...@@ -11,21 +11,20 @@ ...@@ -11,21 +11,20 @@
namespace extensions { namespace extensions {
class ExtensionOptionsGuest;
class ChromeExtensionOptionsGuestDelegate class ChromeExtensionOptionsGuestDelegate
: public ExtensionOptionsGuestDelegate { : public ExtensionOptionsGuestDelegate {
public: public:
ChromeExtensionOptionsGuestDelegate(); explicit ChromeExtensionOptionsGuestDelegate(ExtensionOptionsGuest* guest);
virtual ~ChromeExtensionOptionsGuestDelegate(); virtual ~ChromeExtensionOptionsGuestDelegate();
virtual void CreateChromeExtensionWebContentsObserver( virtual void DidInitialize() OVERRIDE;
content::WebContents* web_contents) OVERRIDE;
virtual bool HandleContextMenu( virtual bool HandleContextMenu(
content::WebContents* web_contents,
const content::ContextMenuParams& params) OVERRIDE; const content::ContextMenuParams& params) OVERRIDE;
virtual content::WebContents* OpenURLInNewTab( virtual content::WebContents* OpenURLInNewTab(
content::WebContents* embedder_web_contents,
const content::OpenURLParams& params) OVERRIDE; const content::OpenURLParams& params) OVERRIDE;
private: private:
......
...@@ -32,7 +32,8 @@ AppViewGuestDelegate* ExtensionsAPIClient::CreateAppViewGuestDelegate() const { ...@@ -32,7 +32,8 @@ AppViewGuestDelegate* ExtensionsAPIClient::CreateAppViewGuestDelegate() const {
} }
ExtensionOptionsGuestDelegate* ExtensionOptionsGuestDelegate*
ExtensionsAPIClient::CreateExtensionOptionsGuestDelegate() const { ExtensionsAPIClient::CreateExtensionOptionsGuestDelegate(
ExtensionOptionsGuest* guest) const {
return NULL; return NULL;
} }
......
...@@ -24,6 +24,7 @@ class BrowserContext; ...@@ -24,6 +24,7 @@ class BrowserContext;
namespace extensions { namespace extensions {
class AppViewGuestDelegate; class AppViewGuestDelegate;
class ExtensionOptionsGuest;
class ExtensionOptionsGuestDelegate; class ExtensionOptionsGuestDelegate;
class MimeHandlerViewGuest; class MimeHandlerViewGuest;
class MimeHandlerViewGuestDelegate; class MimeHandlerViewGuestDelegate;
...@@ -64,8 +65,8 @@ class ExtensionsAPIClient { ...@@ -64,8 +65,8 @@ class ExtensionsAPIClient {
// Returns a delegate for ExtensionOptionsGuest. The caller owns the returned // Returns a delegate for ExtensionOptionsGuest. The caller owns the returned
// ExtensionOptionsGuestDelegate. // ExtensionOptionsGuestDelegate.
virtual ExtensionOptionsGuestDelegate* CreateExtensionOptionsGuestDelegate() virtual ExtensionOptionsGuestDelegate* CreateExtensionOptionsGuestDelegate(
const; ExtensionOptionsGuest* guest) const;
// Creates a delegate for MimeHandlerViewGuest. // Creates a delegate for MimeHandlerViewGuest.
virtual scoped_ptr<MimeHandlerViewGuestDelegate> virtual scoped_ptr<MimeHandlerViewGuestDelegate>
......
...@@ -29,6 +29,8 @@ ...@@ -29,6 +29,8 @@
using content::WebContents; using content::WebContents;
using namespace extensions::core_api; using namespace extensions::core_api;
namespace extensions {
// static // static
const char ExtensionOptionsGuest::Type[] = "extensionoptions"; const char ExtensionOptionsGuest::Type[] = "extensionoptions";
...@@ -38,7 +40,7 @@ ExtensionOptionsGuest::ExtensionOptionsGuest( ...@@ -38,7 +40,7 @@ ExtensionOptionsGuest::ExtensionOptionsGuest(
: GuestView<ExtensionOptionsGuest>(browser_context, guest_instance_id), : GuestView<ExtensionOptionsGuest>(browser_context, guest_instance_id),
extension_options_guest_delegate_( extension_options_guest_delegate_(
extensions::ExtensionsAPIClient::Get() extensions::ExtensionsAPIClient::Get()
->CreateExtensionOptionsGuestDelegate()) { ->CreateExtensionOptionsGuestDelegate(this)) {
} }
ExtensionOptionsGuest::~ExtensionOptionsGuest() { ExtensionOptionsGuest::~ExtensionOptionsGuest() {
...@@ -115,8 +117,7 @@ void ExtensionOptionsGuest::DidInitialize() { ...@@ -115,8 +117,7 @@ void ExtensionOptionsGuest::DidInitialize() {
extension_function_dispatcher_.reset( extension_function_dispatcher_.reset(
new extensions::ExtensionFunctionDispatcher(browser_context(), this)); new extensions::ExtensionFunctionDispatcher(browser_context(), this));
if (extension_options_guest_delegate_) { if (extension_options_guest_delegate_) {
extension_options_guest_delegate_->CreateChromeExtensionWebContentsObserver( extension_options_guest_delegate_->DidInitialize();
web_contents());
} }
} }
...@@ -166,7 +167,6 @@ content::WebContents* ExtensionOptionsGuest::OpenURLFromTab( ...@@ -166,7 +167,6 @@ content::WebContents* ExtensionOptionsGuest::OpenURLFromTab(
params.url.host() != options_page_.host()) && params.url.host() != options_page_.host()) &&
params.disposition == CURRENT_TAB) { params.disposition == CURRENT_TAB) {
return extension_options_guest_delegate_->OpenURLInNewTab( 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,
...@@ -174,8 +174,7 @@ content::WebContents* ExtensionOptionsGuest::OpenURLFromTab( ...@@ -174,8 +174,7 @@ content::WebContents* ExtensionOptionsGuest::OpenURLFromTab(
params.transition, params.transition,
params.is_renderer_initiated)); params.is_renderer_initiated));
} }
return extension_options_guest_delegate_->OpenURLInNewTab( return extension_options_guest_delegate_->OpenURLInNewTab(params);
embedder_web_contents(), params);
} }
void ExtensionOptionsGuest::CloseContents(content::WebContents* source) { void ExtensionOptionsGuest::CloseContents(content::WebContents* source) {
...@@ -189,8 +188,7 @@ bool ExtensionOptionsGuest::HandleContextMenu( ...@@ -189,8 +188,7 @@ bool ExtensionOptionsGuest::HandleContextMenu(
if (!extension_options_guest_delegate_) if (!extension_options_guest_delegate_)
return false; return false;
return extension_options_guest_delegate_->HandleContextMenu(web_contents(), return extension_options_guest_delegate_->HandleContextMenu(params);
params);
} }
bool ExtensionOptionsGuest::ShouldCreateWebContents( bool ExtensionOptionsGuest::ShouldCreateWebContents(
...@@ -210,7 +208,6 @@ bool ExtensionOptionsGuest::ShouldCreateWebContents( ...@@ -210,7 +208,6 @@ bool ExtensionOptionsGuest::ShouldCreateWebContents(
// ctrl-click or middle mouse button click // ctrl-click or middle mouse button click
if (extension_options_guest_delegate_) { if (extension_options_guest_delegate_) {
extension_options_guest_delegate_->OpenURLInNewTab( extension_options_guest_delegate_->OpenURLInNewTab(
embedder_web_contents(),
content::OpenURLParams(target_url, content::OpenURLParams(target_url,
content::Referrer(), content::Referrer(),
NEW_FOREGROUND_TAB, NEW_FOREGROUND_TAB,
...@@ -259,3 +256,5 @@ void ExtensionOptionsGuest::SetUpAutoSize() { ...@@ -259,3 +256,5 @@ void ExtensionOptionsGuest::SetUpAutoSize() {
gfx::Size(min_width, min_height), gfx::Size(min_width, min_height),
gfx::Size(max_width, max_height)); gfx::Size(max_width, max_height));
} }
} // namespace extensions
...@@ -15,6 +15,8 @@ namespace content { ...@@ -15,6 +15,8 @@ namespace content {
class BrowserContext; class BrowserContext;
} }
namespace extensions {
class ExtensionOptionsGuest class ExtensionOptionsGuest
: public extensions::GuestView<ExtensionOptionsGuest>, : public extensions::GuestView<ExtensionOptionsGuest>,
public extensions::ExtensionFunctionDispatcher::Delegate { public extensions::ExtensionFunctionDispatcher::Delegate {
...@@ -78,4 +80,6 @@ class ExtensionOptionsGuest ...@@ -78,4 +80,6 @@ class ExtensionOptionsGuest
DISALLOW_COPY_AND_ASSIGN(ExtensionOptionsGuest); DISALLOW_COPY_AND_ASSIGN(ExtensionOptionsGuest);
}; };
} // namespace extensions
#endif // EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_H_ #endif // EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_H_
...@@ -6,6 +6,11 @@ ...@@ -6,6 +6,11 @@
namespace extensions { namespace extensions {
ExtensionOptionsGuestDelegate::ExtensionOptionsGuestDelegate(
ExtensionOptionsGuest* guest)
: guest_(guest) {
}
ExtensionOptionsGuestDelegate::~ExtensionOptionsGuestDelegate() { ExtensionOptionsGuestDelegate::~ExtensionOptionsGuestDelegate() {
} }
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_DELEGATE_H_ #ifndef EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_DELEGATE_H_
#define EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_DELEGATE_H_ #define EXTENSIONS_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_DELEGATE_H_
#include "base/macros.h"
namespace content { namespace content {
struct ContextMenuParams; struct ContextMenuParams;
struct OpenURLParams; struct OpenURLParams;
...@@ -12,23 +14,32 @@ class WebContents; ...@@ -12,23 +14,32 @@ class WebContents;
} }
namespace extensions { namespace extensions {
class ExtensionOptionsGuest;
// Interface to handle communication between ExtensionOptionsGuest (in // Interface to handle communication between ExtensionOptionsGuest (in
// extensions) with the browser. // extensions) with the browser.
class ExtensionOptionsGuestDelegate { class ExtensionOptionsGuestDelegate {
public: public:
explicit ExtensionOptionsGuestDelegate(ExtensionOptionsGuest* guest);
virtual ~ExtensionOptionsGuestDelegate(); virtual ~ExtensionOptionsGuestDelegate();
virtual void CreateChromeExtensionWebContentsObserver( // Called from ExtensionOptionsGuest::DidInitialize().
content::WebContents* web_contents) = 0; virtual void DidInitialize() = 0;
// Shows the context menu for the guest. // Shows the context menu for the guest.
// Returns true if the context menu was handled. // Returns true if the context menu was handled.
virtual bool HandleContextMenu(content::WebContents* web_contents, virtual bool HandleContextMenu(const content::ContextMenuParams& params) = 0;
const content::ContextMenuParams& params) = 0;
virtual content::WebContents* OpenURLInNewTab( virtual content::WebContents* OpenURLInNewTab(
content::WebContents* embedder_web_contents,
const content::OpenURLParams& params) = 0; const content::OpenURLParams& params) = 0;
ExtensionOptionsGuest* extension_options_guest() const { return guest_; }
private:
ExtensionOptionsGuest* const guest_;
DISALLOW_COPY_AND_ASSIGN(ExtensionOptionsGuestDelegate);
}; };
} // namespace extensions } // namespace extensions
......
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