| Index: extensions/renderer/guest_view/web_view_container.cc
|
| diff --git a/extensions/renderer/guest_view/guest_view_container.cc b/extensions/renderer/guest_view/web_view_container.cc
|
| similarity index 53%
|
| copy from extensions/renderer/guest_view/guest_view_container.cc
|
| copy to extensions/renderer/guest_view/web_view_container.cc
|
| index 781027063a16d8079aa3dc2de2d08a7222e5c59d..63b801145d110b6f2156b54bc4a5ac188456b645 100644
|
| --- a/extensions/renderer/guest_view/guest_view_container.cc
|
| +++ b/extensions/renderer/guest_view/web_view_container.cc
|
| @@ -2,9 +2,8 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "extensions/renderer/guest_view/guest_view_container.h"
|
| +#include "extensions/renderer/guest_view/web_view_container.h"
|
|
|
| -#include "content/public/renderer/browser_plugin_delegate.h"
|
| #include "content/public/renderer/render_frame.h"
|
| #include "content/public/renderer/render_view.h"
|
| #include "extensions/common/extension_messages.h"
|
| @@ -15,15 +14,15 @@
|
|
|
| namespace {
|
| typedef std::pair<int, int> GuestViewID;
|
| -typedef std::map<GuestViewID, extensions::GuestViewContainer*>
|
| - GuestViewContainerMap;
|
| -static base::LazyInstance<GuestViewContainerMap> g_guest_view_container_map =
|
| +typedef std::map<GuestViewID, extensions::WebViewContainer*>
|
| + WebViewContainerMap;
|
| +static base::LazyInstance<WebViewContainerMap> g_guest_view_container_map =
|
| LAZY_INSTANCE_INITIALIZER;
|
| } // namespace
|
|
|
| namespace extensions {
|
|
|
| -GuestViewContainer::AttachRequest::AttachRequest(
|
| +WebViewContainer::AttachRequest::AttachRequest(
|
| int element_instance_id,
|
| int guest_instance_id,
|
| scoped_ptr<base::DictionaryValue> params,
|
| @@ -36,131 +35,80 @@ GuestViewContainer::AttachRequest::AttachRequest(
|
| isolate_(isolate) {
|
| }
|
|
|
| -GuestViewContainer::AttachRequest::~AttachRequest() {
|
| +WebViewContainer::AttachRequest::~AttachRequest() {
|
| }
|
|
|
| -bool GuestViewContainer::AttachRequest::HasCallback() const {
|
| +bool WebViewContainer::AttachRequest::HasCallback() const {
|
| return !callback_.IsEmpty();
|
| }
|
|
|
| v8::Handle<v8::Function>
|
| -GuestViewContainer::AttachRequest::GetCallback() const {
|
| +WebViewContainer::AttachRequest::GetCallback() const {
|
| return callback_.NewHandle(isolate_);
|
| }
|
|
|
| -GuestViewContainer::GuestViewContainer(
|
| - content::RenderFrame* render_frame,
|
| - const std::string& mime_type)
|
| - : content::BrowserPluginDelegate(render_frame, mime_type),
|
| - content::RenderFrameObserver(render_frame),
|
| - mime_type_(mime_type),
|
| - element_instance_id_(guestview::kInstanceIDNone),
|
| - render_view_routing_id_(render_frame->GetRenderView()->GetRoutingID()),
|
| - attached_(false),
|
| +WebViewContainer::WebViewContainer(content::RenderFrame* render_frame)
|
| + : GuestViewContainer(render_frame),
|
| ready_(false) {
|
| }
|
|
|
| -GuestViewContainer::~GuestViewContainer() {
|
| +WebViewContainer::~WebViewContainer() {
|
| if (element_instance_id_ != guestview::kInstanceIDNone) {
|
| g_guest_view_container_map.Get().erase(
|
| GuestViewID(render_view_routing_id_, element_instance_id_));
|
| }
|
| }
|
|
|
| -GuestViewContainer* GuestViewContainer::FromID(int render_view_routing_id,
|
| - int element_instance_id) {
|
| - GuestViewContainerMap* guest_view_containers =
|
| +WebViewContainer* WebViewContainer::FromID(int render_view_routing_id,
|
| + int element_instance_id) {
|
| + WebViewContainerMap* guest_view_containers =
|
| g_guest_view_container_map.Pointer();
|
| - GuestViewContainerMap::iterator it = guest_view_containers->find(
|
| + WebViewContainerMap::iterator it = guest_view_containers->find(
|
| GuestViewID(render_view_routing_id, element_instance_id));
|
| return it == guest_view_containers->end() ? NULL : it->second;
|
| }
|
|
|
| -void GuestViewContainer::AttachGuest(linked_ptr<AttachRequest> request) {
|
| +void WebViewContainer::AttachGuest(linked_ptr<AttachRequest> request) {
|
| EnqueueAttachRequest(request);
|
| PerformPendingAttachRequest();
|
| }
|
|
|
| -void GuestViewContainer::SetElementInstanceID(int element_instance_id) {
|
| +void WebViewContainer::SetElementInstanceID(int element_instance_id) {
|
| + GuestViewContainer::SetElementInstanceID(element_instance_id);
|
| +
|
| GuestViewID guest_view_id(render_view_routing_id_, element_instance_id);
|
| - DCHECK_EQ(element_instance_id_, guestview::kInstanceIDNone);
|
| DCHECK(g_guest_view_container_map.Get().find(guest_view_id) ==
|
| g_guest_view_container_map.Get().end());
|
| - element_instance_id_ = element_instance_id;
|
| g_guest_view_container_map.Get().insert(std::make_pair(guest_view_id, this));
|
| }
|
|
|
| -void GuestViewContainer::DidFinishLoading() {
|
| - if (mime_type_.empty())
|
| - return;
|
| -
|
| - DCHECK_NE(element_instance_id_, guestview::kInstanceIDNone);
|
| - render_frame()->Send(new ExtensionHostMsg_CreateMimeHandlerViewGuest(
|
| - routing_id(), html_string_, mime_type_, element_instance_id_));
|
| -}
|
| -
|
| -void GuestViewContainer::DidReceiveData(const char* data, int data_length) {
|
| - std::string value(data, data_length);
|
| - html_string_ += value;
|
| -}
|
| -
|
| -void GuestViewContainer::Ready() {
|
| +void WebViewContainer::Ready() {
|
| ready_ = true;
|
| CHECK(!pending_response_.get());
|
| PerformPendingAttachRequest();
|
| }
|
|
|
| -void GuestViewContainer::OnDestruct() {
|
| - // GuestViewContainer's lifetime is managed by BrowserPlugin so don't let
|
| - // RenderFrameObserver self-destruct here.
|
| +bool WebViewContainer::HandlesMessage(const IPC::Message& message) {
|
| + return message.type() == ExtensionMsg_GuestAttached::ID;
|
| }
|
|
|
| -bool GuestViewContainer::OnMessageReceived(const IPC::Message& message) {
|
| - if (!ShouldHandleMessage(message))
|
| - return false;
|
| -
|
| - DCHECK_NE(element_instance_id_, guestview::kInstanceIDNone);
|
| - int element_instance_id = guestview::kInstanceIDNone;
|
| - PickleIterator iter(message);
|
| - bool success = iter.ReadInt(&element_instance_id);
|
| - DCHECK(success);
|
| - if (element_instance_id != element_instance_id_)
|
| - return false;
|
| -
|
| - bool handled = true;
|
| - IPC_BEGIN_MESSAGE_MAP(GuestViewContainer, message)
|
| - IPC_MESSAGE_HANDLER(ExtensionMsg_CreateMimeHandlerViewGuestACK,
|
| - OnCreateMimeHandlerViewGuestACK)
|
| +bool WebViewContainer::OnMessage(const IPC::Message& message) {
|
| + bool handled = false;
|
| + IPC_BEGIN_MESSAGE_MAP(WebViewContainer, message)
|
| IPC_MESSAGE_HANDLER(ExtensionMsg_GuestAttached, OnGuestAttached)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
| return handled;
|
| }
|
|
|
| -void GuestViewContainer::OnCreateMimeHandlerViewGuestACK(
|
| - int element_instance_id) {
|
| - DCHECK_NE(element_instance_id_, guestview::kInstanceIDNone);
|
| - DCHECK_EQ(element_instance_id_, element_instance_id);
|
| - DCHECK(!mime_type_.empty());
|
| - render_frame()->AttachGuest(element_instance_id);
|
| -}
|
| -
|
| -void GuestViewContainer::OnGuestAttached(int element_instance_id,
|
| - int guest_proxy_routing_id) {
|
| - attached_ = true;
|
| -
|
| - if (!mime_type_.empty()) {
|
| - // MimeHandlerView's creation and attachment is not done via JS API.
|
| - return;
|
| - }
|
| -
|
| +void WebViewContainer::OnGuestAttached(int guest_proxy_routing_id) {
|
| // Handle the callback for the current request with a pending response.
|
| HandlePendingResponseCallback(guest_proxy_routing_id);
|
| // Perform the subsequent attach request if one exists.
|
| PerformPendingAttachRequest();
|
| }
|
|
|
| -void GuestViewContainer::AttachGuestInternal(
|
| +void WebViewContainer::AttachGuestInternal(
|
| linked_ptr<AttachRequest> request) {
|
| CHECK(!pending_response_.get());
|
| // Step 1, send the attach params to chrome/.
|
| @@ -176,12 +124,12 @@ void GuestViewContainer::AttachGuestInternal(
|
| pending_response_ = request;
|
| }
|
|
|
| -void GuestViewContainer::EnqueueAttachRequest(
|
| +void WebViewContainer::EnqueueAttachRequest(
|
| linked_ptr<AttachRequest> request) {
|
| pending_requests_.push_back(request);
|
| }
|
|
|
| -void GuestViewContainer::PerformPendingAttachRequest() {
|
| +void WebViewContainer::PerformPendingAttachRequest() {
|
| if (!ready_ || pending_requests_.empty() || pending_response_.get())
|
| return;
|
|
|
| @@ -190,7 +138,7 @@ void GuestViewContainer::PerformPendingAttachRequest() {
|
| AttachGuestInternal(pending_request);
|
| }
|
|
|
| -void GuestViewContainer::HandlePendingResponseCallback(
|
| +void WebViewContainer::HandlePendingResponseCallback(
|
| int guest_proxy_routing_id) {
|
| CHECK(pending_response_.get());
|
| linked_ptr<AttachRequest> pending_response(pending_response_.release());
|
| @@ -225,16 +173,4 @@ void GuestViewContainer::HandlePendingResponseCallback(
|
| callback->Call(context->Global(), argc, argv);
|
| }
|
|
|
| -// static
|
| -bool GuestViewContainer::ShouldHandleMessage(const IPC::Message& message) {
|
| - switch (message.type()) {
|
| - case ExtensionMsg_CreateMimeHandlerViewGuestACK::ID:
|
| - case ExtensionMsg_GuestAttached::ID:
|
| - return true;
|
| - default:
|
| - break;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| } // namespace extensions
|
|
|