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