Commit d610be6f authored by lazyboy's avatar lazyboy Committed by Commit bot

Make extension APIs work in MimeHandlerView.

This will make some zoom functionality work in pdf viewer as they rely on
tabs.setZoomSettings/tabs.setZoom.

BUG=416332
Test=Load chrome with --enable-mime-handler-view and --out-of-process-pdf
Navigate to a pdf file, see ctrl+/- or zooming through browser menu work.
Ctrl + wheel still doesn't work, will fix that in a follow up CL.

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

Cr-Commit-Position: refs/heads/master@{#296295}
parent 10f9b627
...@@ -14,9 +14,11 @@ ...@@ -14,9 +14,11 @@
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.h" #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.h"
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h" #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h"
#include "extensions/browser/process_manager.h" #include "extensions/browser/process_manager.h"
#include "extensions/common/extension_messages.h"
#include "extensions/common/feature_switch.h" #include "extensions/common/feature_switch.h"
#include "extensions/common/guest_view/guest_view_constants.h" #include "extensions/common/guest_view/guest_view_constants.h"
#include "extensions/strings/grit/extensions_strings.h" #include "extensions/strings/grit/extensions_strings.h"
#include "ipc/ipc_message_macros.h"
#include "net/base/url_util.h" #include "net/base/url_util.h"
using content::WebContents; using content::WebContents;
...@@ -47,6 +49,14 @@ MimeHandlerViewGuest::MimeHandlerViewGuest( ...@@ -47,6 +49,14 @@ MimeHandlerViewGuest::MimeHandlerViewGuest(
MimeHandlerViewGuest::~MimeHandlerViewGuest() { MimeHandlerViewGuest::~MimeHandlerViewGuest() {
} }
WindowController* MimeHandlerViewGuest::GetExtensionWindowController() const {
return NULL;
}
WebContents* MimeHandlerViewGuest::GetAssociatedWebContents() const {
return web_contents();
}
const char* MimeHandlerViewGuest::GetAPINamespace() const { const char* MimeHandlerViewGuest::GetAPINamespace() const {
return "mimeHandlerViewGuestInternal"; return "mimeHandlerViewGuestInternal";
} }
...@@ -115,6 +125,8 @@ void MimeHandlerViewGuest::DidAttachToEmbedder() { ...@@ -115,6 +125,8 @@ void MimeHandlerViewGuest::DidAttachToEmbedder() {
} }
void MimeHandlerViewGuest::DidInitialize() { void MimeHandlerViewGuest::DidInitialize() {
extension_function_dispatcher_.reset(
new ExtensionFunctionDispatcher(browser_context(), this));
if (delegate_) if (delegate_)
delegate_->AttachHelpers(); delegate_->AttachHelpers();
} }
...@@ -135,4 +147,21 @@ void MimeHandlerViewGuest::HandleKeyboardEvent( ...@@ -135,4 +147,21 @@ void MimeHandlerViewGuest::HandleKeyboardEvent(
event); event);
} }
bool MimeHandlerViewGuest::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(MimeHandlerViewGuest, message)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_Request, OnRequest)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
void MimeHandlerViewGuest::OnRequest(
const ExtensionHostMsg_Request_Params& params) {
if (extension_function_dispatcher_) {
extension_function_dispatcher_->Dispatch(
params, web_contents()->GetRenderViewHost());
}
}
} // namespace extensions } // namespace extensions
...@@ -5,19 +5,25 @@ ...@@ -5,19 +5,25 @@
#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_MIME_HANDLER_VIEW_MIME_HANDLER_VIEW_GUEST_H_ #ifndef EXTENSIONS_BROWSER_GUEST_VIEW_MIME_HANDLER_VIEW_MIME_HANDLER_VIEW_GUEST_H_
#define EXTENSIONS_BROWSER_GUEST_VIEW_MIME_HANDLER_VIEW_MIME_HANDLER_VIEW_GUEST_H_ #define EXTENSIONS_BROWSER_GUEST_VIEW_MIME_HANDLER_VIEW_MIME_HANDLER_VIEW_GUEST_H_
#include "extensions/browser/extension_function_dispatcher.h"
#include "extensions/browser/guest_view/guest_view.h" #include "extensions/browser/guest_view/guest_view.h"
namespace extensions { namespace extensions {
class MimeHandlerViewGuestDelegate; class MimeHandlerViewGuestDelegate;
class MimeHandlerViewGuest : public GuestView<MimeHandlerViewGuest> { class MimeHandlerViewGuest : public GuestView<MimeHandlerViewGuest>,
public ExtensionFunctionDispatcher::Delegate {
public: public:
static GuestViewBase* Create(content::BrowserContext* browser_context, static GuestViewBase* Create(content::BrowserContext* browser_context,
int guest_instance_id); int guest_instance_id);
static const char Type[]; static const char Type[];
// ExtensionFunctionDispatcher::Delegate implementation.
virtual WindowController* GetExtensionWindowController() const OVERRIDE;
virtual content::WebContents* GetAssociatedWebContents() const OVERRIDE;
// GuestViewBase implementation. // GuestViewBase implementation.
virtual const char* GetAPINamespace() const OVERRIDE; virtual const char* GetAPINamespace() const OVERRIDE;
virtual int GetTaskPrefix() const OVERRIDE; virtual int GetTaskPrefix() const OVERRIDE;
...@@ -35,12 +41,18 @@ class MimeHandlerViewGuest : public GuestView<MimeHandlerViewGuest> { ...@@ -35,12 +41,18 @@ class MimeHandlerViewGuest : public GuestView<MimeHandlerViewGuest> {
content::WebContents* source, content::WebContents* source,
const content::NativeWebKeyboardEvent& event) OVERRIDE; const content::NativeWebKeyboardEvent& event) OVERRIDE;
// content::WebContentsObserver implementation.
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private: private:
MimeHandlerViewGuest(content::BrowserContext* browser_context, MimeHandlerViewGuest(content::BrowserContext* browser_context,
int guest_instance_id); int guest_instance_id);
virtual ~MimeHandlerViewGuest(); virtual ~MimeHandlerViewGuest();
void OnRequest(const ExtensionHostMsg_Request_Params& params);
scoped_ptr<MimeHandlerViewGuestDelegate> delegate_; scoped_ptr<MimeHandlerViewGuestDelegate> delegate_;
scoped_ptr<ExtensionFunctionDispatcher> extension_function_dispatcher_;
DISALLOW_COPY_AND_ASSIGN(MimeHandlerViewGuest); DISALLOW_COPY_AND_ASSIGN(MimeHandlerViewGuest);
}; };
......
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