Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4573)

Unified Diff: chrome/renderer/pepper/pepper_extensions_common_host.cc

Issue 12567028: Apps V2 in Pepper: Host side implementation of ExntensionsCommon - Part 1. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/pepper/pepper_extensions_common_host.cc
diff --git a/chrome/renderer/pepper/pepper_extensions_common_host.cc b/chrome/renderer/pepper/pepper_extensions_common_host.cc
index dacfd7ca49b6b8c16f488344ada2b86cb4ba652d..63a17c70439a640993fcc18ad7798ffb94bef502 100644
--- a/chrome/renderer/pepper/pepper_extensions_common_host.cc
+++ b/chrome/renderer/pepper/pepper_extensions_common_host.cc
@@ -4,25 +4,38 @@
#include "chrome/renderer/pepper/pepper_extensions_common_host.h"
+#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
#include "base/values.h"
+#include "chrome/renderer/extensions/chrome_v8_context.h"
+#include "chrome/renderer/extensions/dispatcher.h"
+#include "chrome/renderer/extensions/extension_helper.h"
+#include "content/public/renderer/render_view.h"
#include "content/public/renderer/renderer_ppapi_host.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/host/dispatch_host_message.h"
#include "ppapi/host/host_message_context.h"
#include "ppapi/host/ppapi_host.h"
#include "ppapi/proxy/ppapi_messages.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h"
namespace chrome {
PepperExtensionsCommonHost::PepperExtensionsCommonHost(
content::RendererPpapiHost* host,
PP_Instance instance,
- PP_Resource resource)
+ PP_Resource resource,
+ extensions::Dispatcher* dispatcher)
: ResourceHost(host->GetPpapiHost(), instance, resource),
- renderer_ppapi_host_(host) {
+ renderer_ppapi_host_(host),
+ dispatcher_(dispatcher) {
}
PepperExtensionsCommonHost::~PepperExtensionsCommonHost() {
+ dispatcher_->request_sender()->InvalidateSource(this);
}
// static
@@ -30,7 +43,18 @@ PepperExtensionsCommonHost* PepperExtensionsCommonHost::Create(
content::RendererPpapiHost* host,
PP_Instance instance,
PP_Resource resource) {
- return new PepperExtensionsCommonHost(host, instance, resource);
+ content::RenderView* render_view = host->GetRenderViewForInstance(instance);
+ if (!render_view)
+ return NULL;
+ extensions::ExtensionHelper* extension_helper =
+ extensions::ExtensionHelper::Get(render_view);
+ if (!extension_helper)
+ return NULL;
+ extensions::Dispatcher* dispatcher = extension_helper->dispatcher();
+ if (!dispatcher)
+ return NULL;
+
+ return new PepperExtensionsCommonHost(host, instance, resource, dispatcher);
}
int32_t PepperExtensionsCommonHost::OnResourceMessageReceived(
@@ -45,20 +69,66 @@ int32_t PepperExtensionsCommonHost::OnResourceMessageReceived(
return PP_ERROR_FAILED;
}
+extensions::ChromeV8Context* PepperExtensionsCommonHost::GetContext() {
+ WebKit::WebPluginContainer* container =
+ renderer_ppapi_host_->GetContainerForInstance(pp_instance());
+ if (!container)
+ return NULL;
+
+ WebKit::WebFrame* frame = container->element().document().frame();
+ v8::HandleScope scope;
+ return dispatcher_->v8_context_set().GetByV8Context(
+ frame->mainWorldScriptContext());
+}
+
+void PepperExtensionsCommonHost::OnResponseReceived(
+ const std::string& /* name */,
+ int request_id,
+ bool success,
+ const base::ListValue& response,
+ const std::string& /* error */) {
+ PendingRequestMap::iterator iter = pending_request_map_.find(request_id);
+
+ // Ignore responses resulted from calls to OnPost().
+ if (iter == pending_request_map_.end()) {
+ DCHECK_EQ(0u, response.GetSize());
+ return;
+ }
+
+ linked_ptr<ppapi::host::ReplyMessageContext> context = iter->second;
+ pending_request_map_.erase(iter);
+
+ context->params.set_result(success ? PP_OK : PP_ERROR_FAILED);
+ SendReply(*context, PpapiPluginMsg_ExtensionsCommon_CallReply(response));
+}
+
int32_t PepperExtensionsCommonHost::OnPost(
ppapi::host::HostMessageContext* context,
const std::string& request_name,
- const base::ListValue& args) {
- // TODO(yzshen): Implement it.
- return PP_ERROR_NOTSUPPORTED;
+ base::ListValue& args) {
+ // TODO(yzshen): Add support for calling into JS for APIs that have custom
+ // bindings.
+ int request_id = dispatcher_->request_sender()->GetNextRequestId();
+ dispatcher_->request_sender()->StartRequest(this, request_name, request_id,
+ false, false, &args);
+ return PP_OK;
}
int32_t PepperExtensionsCommonHost::OnCall(
ppapi::host::HostMessageContext* context,
const std::string& request_name,
- const base::ListValue& args) {
- // TODO(yzshen): Implement it.
- return PP_ERROR_NOTSUPPORTED;
+ base::ListValue& args) {
+ // TODO(yzshen): Add support for calling into JS for APIs that have custom
+ // bindings.
+ int request_id = dispatcher_->request_sender()->GetNextRequestId();
+ pending_request_map_[request_id] =
+ linked_ptr<ppapi::host::ReplyMessageContext>(
+ new ppapi::host::ReplyMessageContext(
+ context->MakeReplyMessageContext()));
+
+ dispatcher_->request_sender()->StartRequest(this, request_name, request_id,
+ true, false, &args);
+ return PP_OK_COMPLETIONPENDING;
}
} // namespace chrome

Powered by Google App Engine
This is Rietveld 408576698