summaryrefslogtreecommitdiffstats
path: root/chrome/browser/guest_view
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/guest_view')
-rw-r--r--chrome/browser/guest_view/app_view/app_view_guest.cc5
-rw-r--r--chrome/browser/guest_view/app_view/app_view_guest.h5
-rw-r--r--chrome/browser/guest_view/extension_options/extension_options_guest.cc6
-rw-r--r--chrome/browser/guest_view/extension_options/extension_options_guest.h8
-rw-r--r--chrome/browser/guest_view/guest_view.h72
-rw-r--r--chrome/browser/guest_view/guest_view_base.cc450
-rw-r--r--chrome/browser/guest_view/guest_view_base.h331
-rw-r--r--chrome/browser/guest_view/guest_view_manager.cc238
-rw-r--r--chrome/browser/guest_view/guest_view_manager.h123
-rw-r--r--chrome/browser/guest_view/guest_view_manager_factory.h18
-rw-r--r--chrome/browser/guest_view/guest_view_manager_unittest.cc102
-rw-r--r--chrome/browser/guest_view/web_view/javascript_dialog_helper.cc4
-rw-r--r--chrome/browser/guest_view/web_view/javascript_dialog_helper.h4
-rw-r--r--chrome/browser/guest_view/web_view/web_view_find_helper.cc4
-rw-r--r--chrome/browser/guest_view/web_view/web_view_find_helper.h3
-rw-r--r--chrome/browser/guest_view/web_view/web_view_guest.cc6
-rw-r--r--chrome/browser/guest_view/web_view/web_view_guest.h13
-rw-r--r--chrome/browser/guest_view/web_view/web_view_permission_helper.cc4
-rw-r--r--chrome/browser/guest_view/web_view/web_view_permission_helper.h4
-rw-r--r--chrome/browser/guest_view/web_view/web_view_renderer_state.cc4
-rw-r--r--chrome/browser/guest_view/web_view/web_view_renderer_state.h4
21 files changed, 56 insertions, 1352 deletions
diff --git a/chrome/browser/guest_view/app_view/app_view_guest.cc b/chrome/browser/guest_view/app_view/app_view_guest.cc
index 6df3c5d..f92e4ab 100644
--- a/chrome/browser/guest_view/app_view/app_view_guest.cc
+++ b/chrome/browser/guest_view/app_view/app_view_guest.cc
@@ -8,7 +8,6 @@
#include "chrome/browser/extensions/chrome_extension_web_contents_observer.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/guest_view/app_view/app_view_constants.h"
-#include "chrome/browser/guest_view/guest_view_manager.h"
#include "chrome/browser/renderer_context_menu/render_view_context_menu.h"
#include "chrome/common/chrome_switches.h"
#include "components/renderer_context_menu/context_menu_delegate.h"
@@ -18,6 +17,7 @@
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_host.h"
#include "extensions/browser/extension_system.h"
+#include "extensions/browser/guest_view/guest_view_manager.h"
#include "extensions/browser/lazy_background_task_queue.h"
#include "extensions/browser/view_type_utils.h"
#include "extensions/common/api/app_runtime.h"
@@ -30,6 +30,8 @@ using content::RenderFrameHost;
using content::WebContents;
using extensions::ExtensionHost;
+namespace extensions {
+
namespace {
struct ResponseInfo {
@@ -248,3 +250,4 @@ void AppViewGuest::LaunchAppAndFireEvent(
browser_context(), embed_request.Pass(), extension_host->extension());
}
+} // namespace extensions
diff --git a/chrome/browser/guest_view/app_view/app_view_guest.h b/chrome/browser/guest_view/app_view/app_view_guest.h
index 831941e..5643d21 100644
--- a/chrome/browser/guest_view/app_view/app_view_guest.h
+++ b/chrome/browser/guest_view/app_view/app_view_guest.h
@@ -6,13 +6,12 @@
#define CHROME_BROWSER_GUEST_VIEW_APP_VIEW_APP_VIEW_GUEST_H_
#include "base/id_map.h"
-#include "chrome/browser/guest_view/guest_view.h"
#include "extensions/browser/extension_function_dispatcher.h"
+#include "extensions/browser/guest_view/guest_view.h"
namespace extensions {
class Extension;
class ExtensionHost;
-};
// An AppViewGuest provides the browser-side implementation of <appview> API.
// AppViewGuest is created on attachment. That is, when a guest WebContents is
@@ -83,4 +82,6 @@ class AppViewGuest : public GuestView<AppViewGuest>,
DISALLOW_COPY_AND_ASSIGN(AppViewGuest);
};
+} // namespace extensions
+
#endif // CHROME_BROWSER_GUEST_VIEW_APP_VIEW_APP_VIEW_GUEST_H_
diff --git a/chrome/browser/guest_view/extension_options/extension_options_guest.cc b/chrome/browser/guest_view/extension_options/extension_options_guest.cc
index f41cc80..6d89f6f 100644
--- a/chrome/browser/guest_view/extension_options/extension_options_guest.cc
+++ b/chrome/browser/guest_view/extension_options/extension_options_guest.cc
@@ -41,7 +41,7 @@ const char* ExtensionOptionsGuest::GetAPINamespace() {
}
// static
-GuestViewBase* ExtensionOptionsGuest::Create(
+extensions::GuestViewBase* ExtensionOptionsGuest::Create(
content::BrowserContext* browser_context,
int guest_instance_id) {
if (!extensions::FeatureSwitch::embedded_extension_options()->IsEnabled()) {
@@ -114,7 +114,7 @@ void ExtensionOptionsGuest::DidInitialize() {
void ExtensionOptionsGuest::DidStopLoading() {
scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
- DispatchEventToEmbedder(new GuestViewBase::Event(
+ DispatchEventToEmbedder(new extensions::GuestViewBase::Event(
extensions::api::extension_options_internal::OnLoad::kEventName,
args.Pass()));
}
@@ -144,7 +144,7 @@ void ExtensionOptionsGuest::GuestSizeChangedDueToAutoSize(
scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
args->SetInteger(extensionoptions::kWidth, new_size.width());
args->SetInteger(extensionoptions::kHeight, new_size.height());
- DispatchEventToEmbedder(new GuestViewBase::Event(
+ DispatchEventToEmbedder(new extensions::GuestViewBase::Event(
extension_options_internal::OnSizeChanged::kEventName, args.Pass()));
}
diff --git a/chrome/browser/guest_view/extension_options/extension_options_guest.h b/chrome/browser/guest_view/extension_options/extension_options_guest.h
index 65e33fb..78ed020 100644
--- a/chrome/browser/guest_view/extension_options/extension_options_guest.h
+++ b/chrome/browser/guest_view/extension_options/extension_options_guest.h
@@ -6,8 +6,8 @@
#define CHROME_BROWSER_GUEST_VIEW_EXTENSION_OPTIONS_EXTENSION_OPTIONS_GUEST_H_
#include "base/macros.h"
-#include "chrome/browser/guest_view/guest_view.h"
#include "extensions/browser/extension_function_dispatcher.h"
+#include "extensions/browser/guest_view/guest_view.h"
#include "url/gurl.h"
namespace content {
@@ -15,12 +15,12 @@ class BrowserContext;
}
class ExtensionOptionsGuest
- : public GuestView<ExtensionOptionsGuest>,
+ : public extensions::GuestView<ExtensionOptionsGuest>,
public extensions::ExtensionFunctionDispatcher::Delegate {
public:
static const char Type[];
- static GuestViewBase* Create(content::BrowserContext* browser_context,
- int guest_instance_id);
+ static extensions::GuestViewBase* Create(
+ content::BrowserContext* browser_context, int guest_instance_id);
// GuestViewBase implementation.
virtual const char* GetAPINamespace() OVERRIDE;
diff --git a/chrome/browser/guest_view/guest_view.h b/chrome/browser/guest_view/guest_view.h
deleted file mode 100644
index b443500..0000000
--- a/chrome/browser/guest_view/guest_view.h
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_H_
-#define CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_H_
-
-#include "base/bind.h"
-#include "chrome/browser/guest_view/guest_view_base.h"
-#include "content/public/browser/render_frame_host.h"
-
-// A GuestView is the templated base class for out-of-process frames in the
-// chrome layer. GuestView is templated on its derived type to allow for type-
-// safe access. See GuestViewBase for more information.
-template <typename T>
-class GuestView : public GuestViewBase {
- public:
- static void Register() {
- GuestViewBase::RegisterGuestViewType(T::Type, base::Bind(&T::Create));
- }
-
- static T* From(int embedder_process_id, int guest_instance_id) {
- GuestViewBase* guest =
- GuestViewBase::From(embedder_process_id, guest_instance_id);
- if (!guest)
- return NULL;
- return guest->As<T>();
- }
-
- static T* FromWebContents(content::WebContents* contents) {
- GuestViewBase* guest = GuestViewBase::FromWebContents(contents);
- return guest ? guest->As<T>() : NULL;
- }
-
- static T* FromFrameID(int render_process_id, int render_frame_id) {
- content::RenderFrameHost* render_frame_host =
- content::RenderFrameHost::FromID(render_process_id, render_frame_id);
- if (!render_frame_host) {
- return NULL;
- }
- content::WebContents* web_contents =
- content::WebContents::FromRenderFrameHost(render_frame_host);
- return FromWebContents(web_contents);
- }
-
- T* GetOpener() const {
- GuestViewBase* guest = GuestViewBase::GetOpener();
- if (!guest)
- return NULL;
- return guest->As<T>();
- }
-
- void SetOpener(T* opener) {
- GuestViewBase::SetOpener(opener);
- }
-
- // GuestViewBase implementation.
- virtual const char* GetViewType() const OVERRIDE {
- return T::Type;
- }
-
- protected:
- GuestView(content::BrowserContext* browser_context,
- int guest_instance_id)
- : GuestViewBase(browser_context, guest_instance_id) {}
- virtual ~GuestView() {}
-
- private:
- DISALLOW_COPY_AND_ASSIGN(GuestView);
-};
-
-#endif // CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_H_
diff --git a/chrome/browser/guest_view/guest_view_base.cc b/chrome/browser/guest_view/guest_view_base.cc
deleted file mode 100644
index ddc4a0b..0000000
--- a/chrome/browser/guest_view/guest_view_base.cc
+++ /dev/null
@@ -1,450 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/guest_view/guest_view_base.h"
-
-#include "base/lazy_instance.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/guest_view/guest_view_manager.h"
-#include "content/public/browser/render_frame_host.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_view_host.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/common/url_constants.h"
-#include "extensions/browser/api/extensions_api_client.h"
-#include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_registry.h"
-#include "extensions/browser/guest_view/guest_view_constants.h"
-#include "extensions/browser/process_map.h"
-#include "extensions/common/features/feature.h"
-#include "extensions/common/features/feature_provider.h"
-#include "third_party/WebKit/public/web/WebInputEvent.h"
-
-using content::WebContents;
-
-namespace {
-
-typedef std::map<std::string, GuestViewBase::GuestCreationCallback>
- GuestViewCreationMap;
-static base::LazyInstance<GuestViewCreationMap> guest_view_registry =
- LAZY_INSTANCE_INITIALIZER;
-
-typedef std::map<WebContents*, GuestViewBase*> WebContentsGuestViewMap;
-static base::LazyInstance<WebContentsGuestViewMap> webcontents_guestview_map =
- LAZY_INSTANCE_INITIALIZER;
-
-} // namespace
-
-GuestViewBase::Event::Event(const std::string& name,
- scoped_ptr<base::DictionaryValue> args)
- : name_(name), args_(args.Pass()) {
-}
-
-GuestViewBase::Event::~Event() {
-}
-
-scoped_ptr<base::DictionaryValue> GuestViewBase::Event::GetArguments() {
- return args_.Pass();
-}
-
-// This observer ensures that the GuestViewBase destroys itself when its
-// embedder goes away.
-class GuestViewBase::EmbedderWebContentsObserver : public WebContentsObserver {
- public:
- explicit EmbedderWebContentsObserver(GuestViewBase* guest)
- : WebContentsObserver(guest->embedder_web_contents()),
- destroyed_(false),
- guest_(guest) {
- }
-
- virtual ~EmbedderWebContentsObserver() {
- }
-
- // WebContentsObserver implementation.
- virtual void WebContentsDestroyed() OVERRIDE {
- Destroy();
- }
-
- virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE {
- Destroy();
- }
-
- private:
- bool destroyed_;
- GuestViewBase* guest_;
-
- void Destroy() {
- if (destroyed_)
- return;
- destroyed_ = true;
- guest_->embedder_web_contents_ = NULL;
- guest_->EmbedderDestroyed();
- guest_->Destroy();
- }
-
- DISALLOW_COPY_AND_ASSIGN(EmbedderWebContentsObserver);
-};
-
-GuestViewBase::GuestViewBase(content::BrowserContext* browser_context,
- int guest_instance_id)
- : embedder_web_contents_(NULL),
- embedder_render_process_id_(0),
- browser_context_(browser_context),
- guest_instance_id_(guest_instance_id),
- view_instance_id_(guestview::kInstanceIDNone),
- initialized_(false),
- auto_size_enabled_(false),
- weak_ptr_factory_(this) {
-}
-
-void GuestViewBase::Init(const std::string& embedder_extension_id,
- content::WebContents* embedder_web_contents,
- const base::DictionaryValue& create_params,
- const WebContentsCreatedCallback& callback) {
- if (initialized_)
- return;
- initialized_ = true;
-
- extensions::Feature* feature =
- extensions::FeatureProvider::GetAPIFeatures()->GetFeature(
- GetAPINamespace());
- CHECK(feature);
-
- extensions::ProcessMap* process_map =
- extensions::ProcessMap::Get(browser_context());
- CHECK(process_map);
-
- const extensions::Extension* embedder_extension =
- extensions::ExtensionRegistry::Get(browser_context_)
- ->enabled_extensions()
- .GetByID(embedder_extension_id);
- int embedder_process_id =
- embedder_web_contents->GetRenderProcessHost()->GetID();
-
- extensions::Feature::Availability availability =
- feature->IsAvailableToContext(
- embedder_extension,
- process_map->GetMostLikelyContextType(embedder_extension,
- embedder_process_id),
- embedder_web_contents->GetLastCommittedURL());
- if (!availability.is_available()) {
- callback.Run(NULL);
- return;
- }
-
- CreateWebContents(embedder_extension_id,
- embedder_process_id,
- create_params,
- base::Bind(&GuestViewBase::CompleteInit,
- AsWeakPtr(),
- embedder_extension_id,
- embedder_process_id,
- callback));
-}
-
-void GuestViewBase::InitWithWebContents(
- const std::string& embedder_extension_id,
- int embedder_render_process_id,
- content::WebContents* guest_web_contents) {
- DCHECK(guest_web_contents);
- content::RenderProcessHost* embedder_render_process_host =
- content::RenderProcessHost::FromID(embedder_render_process_id);
-
- embedder_extension_id_ = embedder_extension_id;
- embedder_render_process_id_ = embedder_render_process_host->GetID();
- embedder_render_process_host->AddObserver(this);
-
- WebContentsObserver::Observe(guest_web_contents);
- guest_web_contents->SetDelegate(this);
- webcontents_guestview_map.Get().insert(
- std::make_pair(guest_web_contents, this));
- GuestViewManager::FromBrowserContext(browser_context_)->
- AddGuest(guest_instance_id_, guest_web_contents);
-
- // Give the derived class an opportunity to perform additional initialization.
- DidInitialize();
-}
-
-void GuestViewBase::SetAutoSize(bool enabled,
- const gfx::Size& min_size,
- const gfx::Size& max_size) {
- min_auto_size_ = min_size;
- min_auto_size_.SetToMin(max_size);
- max_auto_size_ = max_size;
- max_auto_size_.SetToMax(min_size);
-
- enabled &= !min_auto_size_.IsEmpty() && !max_auto_size_.IsEmpty() &&
- IsAutoSizeSupported();
- if (!enabled && !auto_size_enabled_)
- return;
-
- auto_size_enabled_ = enabled;
-
- if (!attached())
- return;
-
- content::RenderViewHost* rvh = guest_web_contents()->GetRenderViewHost();
- if (auto_size_enabled_) {
- rvh->EnableAutoResize(min_auto_size_, max_auto_size_);
- } else {
- rvh->DisableAutoResize(element_size_);
- guest_size_ = element_size_;
- GuestSizeChangedDueToAutoSize(guest_size_, element_size_);
- }
-}
-
-// static
-void GuestViewBase::RegisterGuestViewType(
- const std::string& view_type,
- const GuestCreationCallback& callback) {
- GuestViewCreationMap::iterator it =
- guest_view_registry.Get().find(view_type);
- DCHECK(it == guest_view_registry.Get().end());
- guest_view_registry.Get()[view_type] = callback;
-}
-
-// static
-GuestViewBase* GuestViewBase::Create(
- content::BrowserContext* browser_context,
- int guest_instance_id,
- const std::string& view_type) {
- if (guest_view_registry.Get().empty())
- RegisterGuestViewTypes();
-
- GuestViewCreationMap::iterator it =
- guest_view_registry.Get().find(view_type);
- if (it == guest_view_registry.Get().end()) {
- NOTREACHED();
- return NULL;
- }
- return it->second.Run(browser_context, guest_instance_id);
-}
-
-// static
-GuestViewBase* GuestViewBase::FromWebContents(WebContents* web_contents) {
- WebContentsGuestViewMap* guest_map = webcontents_guestview_map.Pointer();
- WebContentsGuestViewMap::iterator it = guest_map->find(web_contents);
- return it == guest_map->end() ? NULL : it->second;
-}
-
-// static
-GuestViewBase* GuestViewBase::From(int embedder_process_id,
- int guest_instance_id) {
- content::RenderProcessHost* host =
- content::RenderProcessHost::FromID(embedder_process_id);
- if (!host)
- return NULL;
-
- content::WebContents* guest_web_contents =
- GuestViewManager::FromBrowserContext(host->GetBrowserContext())->
- GetGuestByInstanceIDSafely(guest_instance_id, embedder_process_id);
- if (!guest_web_contents)
- return NULL;
-
- return GuestViewBase::FromWebContents(guest_web_contents);
-}
-
-// static
-bool GuestViewBase::IsGuest(WebContents* web_contents) {
- return !!GuestViewBase::FromWebContents(web_contents);
-}
-
-base::WeakPtr<GuestViewBase> GuestViewBase::AsWeakPtr() {
- return weak_ptr_factory_.GetWeakPtr();
-}
-
-bool GuestViewBase::IsAutoSizeSupported() const {
- return false;
-}
-
-bool GuestViewBase::IsDragAndDropEnabled() const {
- return false;
-}
-
-void GuestViewBase::RenderProcessExited(content::RenderProcessHost* host,
- base::ProcessHandle handle,
- base::TerminationStatus status,
- int exit_code) {
- // GuestViewBase tracks the lifetime of its embedder render process until it
- // is attached to a particular embedder WebContents. At that point, its
- // lifetime is restricted in scope to the lifetime of its embedder
- // WebContents.
- CHECK(!attached());
- CHECK_EQ(host->GetID(), embedder_render_process_id());
-
- // This code path may be reached if the embedder WebContents is killed for
- // whatever reason immediately after a called to GuestViewInternal.createGuest
- // and before attaching the new guest to a frame.
- Destroy();
-}
-
-void GuestViewBase::Destroy() {
- DCHECK(guest_web_contents());
- content::RenderProcessHost* host =
- content::RenderProcessHost::FromID(embedder_render_process_id());
- if (host)
- host->RemoveObserver(this);
- WillDestroy();
- if (!destruction_callback_.is_null())
- destruction_callback_.Run();
-
- webcontents_guestview_map.Get().erase(guest_web_contents());
- GuestViewManager::FromBrowserContext(browser_context_)->
- RemoveGuest(guest_instance_id_);
- pending_events_.clear();
-
- delete guest_web_contents();
-}
-
-void GuestViewBase::DidAttach() {
- // Give the derived class an opportunity to perform some actions.
- DidAttachToEmbedder();
-
- SendQueuedEvents();
-}
-
-void GuestViewBase::ElementSizeChanged(const gfx::Size& old_size,
- const gfx::Size& new_size) {
- element_size_ = new_size;
-}
-
-int GuestViewBase::GetGuestInstanceID() const {
- return guest_instance_id_;
-}
-
-void GuestViewBase::GuestSizeChanged(const gfx::Size& old_size,
- const gfx::Size& new_size) {
- if (!auto_size_enabled_)
- return;
- guest_size_ = new_size;
- GuestSizeChangedDueToAutoSize(old_size, new_size);
-}
-
-void GuestViewBase::SetOpener(GuestViewBase* guest) {
- if (guest && guest->IsViewType(GetViewType())) {
- opener_ = guest->AsWeakPtr();
- return;
- }
- opener_ = base::WeakPtr<GuestViewBase>();
-}
-
-void GuestViewBase::RegisterDestructionCallback(
- const DestructionCallback& callback) {
- destruction_callback_ = callback;
-}
-
-void GuestViewBase::WillAttach(content::WebContents* embedder_web_contents,
- const base::DictionaryValue& extra_params) {
- // After attachment, this GuestViewBase's lifetime is restricted to the
- // lifetime of its embedder WebContents. Observing the RenderProcessHost
- // of the embedder is no longer necessary.
- embedder_web_contents->GetRenderProcessHost()->RemoveObserver(this);
- embedder_web_contents_ = embedder_web_contents;
- embedder_web_contents_observer_.reset(
- new EmbedderWebContentsObserver(this));
- extra_params.GetInteger(guestview::kParameterInstanceId, &view_instance_id_);
- extra_params_.reset(extra_params.DeepCopy());
-
- WillAttachToEmbedder();
-}
-
-void GuestViewBase::DidStopLoading(content::RenderViewHost* render_view_host) {
- if (!IsDragAndDropEnabled()) {
- const char script[] = "window.addEventListener('dragstart', function() { "
- " window.event.preventDefault(); "
- "});";
- render_view_host->GetMainFrame()->ExecuteJavaScript(
- base::ASCIIToUTF16(script));
- }
- DidStopLoading();
-}
-
-void GuestViewBase::RenderViewReady() {
- GuestReady();
- content::RenderViewHost* rvh = guest_web_contents()->GetRenderViewHost();
- if (auto_size_enabled_) {
- rvh->EnableAutoResize(min_auto_size_, max_auto_size_);
- } else {
- rvh->DisableAutoResize(element_size_);
- }
-}
-
-void GuestViewBase::WebContentsDestroyed() {
- GuestDestroyed();
- delete this;
-}
-
-bool GuestViewBase::ShouldFocusPageAfterCrash() {
- // Focus is managed elsewhere.
- return false;
-}
-
-bool GuestViewBase::PreHandleGestureEvent(content::WebContents* source,
- const blink::WebGestureEvent& event) {
- return event.type == blink::WebGestureEvent::GesturePinchBegin ||
- event.type == blink::WebGestureEvent::GesturePinchUpdate ||
- event.type == blink::WebGestureEvent::GesturePinchEnd;
-}
-
-GuestViewBase::~GuestViewBase() {
-}
-
-void GuestViewBase::DispatchEventToEmbedder(Event* event) {
- scoped_ptr<Event> event_ptr(event);
- if (!in_extension()) {
- NOTREACHED();
- return;
- }
-
- if (!attached()) {
- pending_events_.push_back(linked_ptr<Event>(event_ptr.release()));
- return;
- }
-
- extensions::EventFilteringInfo info;
- info.SetInstanceID(view_instance_id_);
- scoped_ptr<base::ListValue> args(new base::ListValue());
- args->Append(event->GetArguments().release());
-
- extensions::EventRouter::DispatchEvent(
- embedder_web_contents_,
- browser_context_,
- embedder_extension_id_,
- event->name(),
- args.Pass(),
- extensions::EventRouter::USER_GESTURE_UNKNOWN,
- info);
-}
-
-void GuestViewBase::SendQueuedEvents() {
- if (!attached())
- return;
- while (!pending_events_.empty()) {
- linked_ptr<Event> event_ptr = pending_events_.front();
- pending_events_.pop_front();
- DispatchEventToEmbedder(event_ptr.release());
- }
-}
-
-void GuestViewBase::CompleteInit(const std::string& embedder_extension_id,
- int embedder_render_process_id,
- const WebContentsCreatedCallback& callback,
- content::WebContents* guest_web_contents) {
- if (!guest_web_contents) {
- // The derived class did not create a WebContents so this class serves no
- // purpose. Let's self-destruct.
- delete this;
- callback.Run(NULL);
- return;
- }
- InitWithWebContents(embedder_extension_id,
- embedder_render_process_id,
- guest_web_contents);
- callback.Run(guest_web_contents);
-}
-
-// static
-void GuestViewBase::RegisterGuestViewTypes() {
- extensions::ExtensionsAPIClient::Get()->RegisterGuestViewTypes();
-}
diff --git a/chrome/browser/guest_view/guest_view_base.h b/chrome/browser/guest_view/guest_view_base.h
deleted file mode 100644
index cbcf9cf..0000000
--- a/chrome/browser/guest_view/guest_view_base.h
+++ /dev/null
@@ -1,331 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_BASE_H_
-#define CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_BASE_H_
-
-#include <queue>
-
-#include "base/memory/weak_ptr.h"
-#include "base/values.h"
-#include "content/public/browser/browser_plugin_guest_delegate.h"
-#include "content/public/browser/render_process_host_observer.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/browser/web_contents_delegate.h"
-#include "content/public/browser/web_contents_observer.h"
-
-struct RendererContentSettingRules;
-
-// A GuestViewBase is the base class browser-side API implementation for a
-// <*view> tag. GuestViewBase maintains an association between a guest
-// WebContents and an embedder WebContents. It receives events issued from
-// the guest and relays them to the embedder. GuestViewBase tracks the lifetime
-// of its embedder render process until it is attached to a particular embedder
-// WebContents. At that point, its lifetime is restricted in scope to the
-// lifetime of its embedder WebContents.
-class GuestViewBase : public content::BrowserPluginGuestDelegate,
- public content::RenderProcessHostObserver,
- public content::WebContentsDelegate,
- public content::WebContentsObserver {
- public:
- class Event {
- public:
- Event(const std::string& name, scoped_ptr<base::DictionaryValue> args);
- ~Event();
-
- const std::string& name() const { return name_; }
-
- scoped_ptr<base::DictionaryValue> GetArguments();
-
- private:
- const std::string name_;
- scoped_ptr<base::DictionaryValue> args_;
- };
-
- // Returns a *ViewGuest if this GuestView is of the given view type.
- template <typename T>
- T* As() {
- if (IsViewType(T::Type))
- return static_cast<T*>(this);
-
- return NULL;
- }
-
- typedef base::Callback<GuestViewBase*(
- content::BrowserContext*, int)> GuestCreationCallback;
- static void RegisterGuestViewType(const std::string& view_type,
- const GuestCreationCallback& callback);
-
- static GuestViewBase* Create(content::BrowserContext* browser_context,
- int guest_instance_id,
- const std::string& view_type);
-
- static GuestViewBase* FromWebContents(content::WebContents* web_contents);
-
- static GuestViewBase* From(int embedder_process_id, int instance_id);
-
- static bool IsGuest(content::WebContents* web_contents);
-
- virtual const char* GetViewType() const = 0;
-
- // This method is called after the guest has been attached to an embedder and
- // suspended resource loads have been resumed.
- //
- // This method can be overriden by subclasses. This gives the derived class
- // an opportunity to perform setup actions after attachment.
- virtual void DidAttachToEmbedder() {}
-
- // This method is called after this GuestViewBase has been initiated.
- //
- // This gives the derived class an opportunity to perform additional
- // initialization.
- virtual void DidInitialize() {}
-
- // This method is called when the initial set of frames within the page have
- // completed loading.
- virtual void DidStopLoading() {}
-
- // This method is called when the guest's embedder WebContents has been
- // destroyed and the guest will be destroyed shortly.
- //
- // This gives the derived class an opportunity to perform some cleanup prior
- // to destruction.
- virtual void EmbedderDestroyed() {}
-
- // This method is called when the guest WebContents has been destroyed. This
- // object will be destroyed after this call returns.
- //
- // This gives the derived class an opportunity to perform some cleanup.
- virtual void GuestDestroyed() {}
-
- // This method is invoked when the guest RenderView is ready, e.g. because we
- // recreated it after a crash.
- //
- // This gives the derived class an opportunity to perform some initialization
- // work.
- virtual void GuestReady() {}
-
- // This method is invoked when the contents auto-resized to give the container
- // an opportunity to match it if it wishes.
- //
- // This gives the derived class an opportunity to inform its container element
- // or perform other actions.
- virtual void GuestSizeChangedDueToAutoSize(const gfx::Size& old_size,
- const gfx::Size& new_size) {}
-
- // This method queries whether autosize is supported for this particular view.
- // By default, autosize is not supported. Derived classes can override this
- // behavior to support autosize.
- virtual bool IsAutoSizeSupported() const;
-
- // This method queries whether drag-and-drop is enabled for this particular
- // view. By default, drag-and-drop is disabled. Derived classes can override
- // this behavior to enable drag-and-drop.
- virtual bool IsDragAndDropEnabled() const;
-
- // This method is called immediately before suspended resource loads have been
- // resumed on attachment to an embedder.
- //
- // This method can be overriden by subclasses. This gives the derived class
- // an opportunity to perform setup actions before attachment.
- virtual void WillAttachToEmbedder() {}
-
- // This method is called when the guest WebContents is about to be destroyed.
- //
- // This gives the derived class an opportunity to perform some cleanup prior
- // to destruction.
- virtual void WillDestroy() {}
-
- // This method is to be implemented by the derived class. Access to guest
- // views are determined by the availability of the internal extension API
- // used to implement the guest view.
- //
- // This should be the name of the API as it appears in the _api_features.json
- // file.
- virtual const char* GetAPINamespace() = 0;
-
- // This method is to be implemented by the derived class. Given a set of
- // initialization parameters, a concrete subclass of GuestViewBase can
- // create a specialized WebContents that it returns back to GuestViewBase.
- typedef base::Callback<void(content::WebContents*)>
- WebContentsCreatedCallback;
- virtual void CreateWebContents(
- const std::string& embedder_extension_id,
- int embedder_render_process_id,
- const base::DictionaryValue& create_params,
- const WebContentsCreatedCallback& callback) = 0;
-
- // This creates a WebContents and initializes |this| GuestViewBase to use the
- // newly created WebContents.
- void Init(const std::string& embedder_extension_id,
- content::WebContents* embedder_web_contents,
- const base::DictionaryValue& create_params,
- const WebContentsCreatedCallback& callback);
-
- void InitWithWebContents(
- const std::string& embedder_extension_id,
- int embedder_render_process_id,
- content::WebContents* guest_web_contents);
-
- bool IsViewType(const char* const view_type) const {
- return !strcmp(GetViewType(), view_type);
- }
-
- // Toggles autosize mode for this GuestView.
- void SetAutoSize(bool enabled,
- const gfx::Size& min_size,
- const gfx::Size& max_size);
-
- base::WeakPtr<GuestViewBase> AsWeakPtr();
-
- bool initialized() const { return initialized_; }
-
- content::WebContents* embedder_web_contents() const {
- return embedder_web_contents_;
- }
-
- // Returns the guest WebContents.
- content::WebContents* guest_web_contents() const {
- return web_contents();
- }
-
- // Returns the extra parameters associated with this GuestView passed
- // in from JavaScript.
- base::DictionaryValue* extra_params() const {
- return extra_params_.get();
- }
-
- // Returns whether this guest has an associated embedder.
- bool attached() const { return !!embedder_web_contents_; }
-
- // Returns the instance ID of the <*view> element.
- int view_instance_id() const { return view_instance_id_; }
-
- // Returns the extension ID of the embedder.
- const std::string& embedder_extension_id() const {
- return embedder_extension_id_;
- }
-
- // Returns whether this GuestView is embedded in an extension/app.
- bool in_extension() const { return !embedder_extension_id_.empty(); }
-
- // Returns the user browser context of the embedder.
- content::BrowserContext* browser_context() const { return browser_context_; }
-
- // Returns the embedder's process ID.
- int embedder_render_process_id() const { return embedder_render_process_id_; }
-
- GuestViewBase* GetOpener() const {
- return opener_.get();
- }
-
- void SetOpener(GuestViewBase* opener);
-
- // RenderProcessHostObserver implementation
- virtual void RenderProcessExited(content::RenderProcessHost* host,
- base::ProcessHandle handle,
- base::TerminationStatus status,
- int exit_code) OVERRIDE;
-
- // BrowserPluginGuestDelegate implementation.
- virtual void Destroy() OVERRIDE FINAL;
- virtual void DidAttach() OVERRIDE FINAL;
- virtual void ElementSizeChanged(const gfx::Size& old_size,
- const gfx::Size& new_size) OVERRIDE FINAL;
- virtual int GetGuestInstanceID() const OVERRIDE;
- virtual void GuestSizeChanged(const gfx::Size& old_size,
- const gfx::Size& new_size) OVERRIDE FINAL;
- virtual void RegisterDestructionCallback(
- const DestructionCallback& callback) OVERRIDE FINAL;
- virtual void WillAttach(
- content::WebContents* embedder_web_contents,
- const base::DictionaryValue& extra_params) OVERRIDE FINAL;
-
- // Dispatches an event |event_name| to the embedder with the |event| fields.
- void DispatchEventToEmbedder(Event* event);
-
- protected:
- GuestViewBase(content::BrowserContext* browser_context,
- int guest_instance_id);
-
- virtual ~GuestViewBase();
-
- private:
- class EmbedderWebContentsObserver;
-
- void SendQueuedEvents();
-
- void CompleteInit(const std::string& embedder_extension_id,
- int embedder_render_process_id,
- const WebContentsCreatedCallback& callback,
- content::WebContents* guest_web_contents);
-
- static void RegisterGuestViewTypes();
-
- // WebContentsObserver implementation.
- virtual void DidStopLoading(
- content::RenderViewHost* render_view_host) OVERRIDE FINAL;
- virtual void RenderViewReady() OVERRIDE FINAL;
- virtual void WebContentsDestroyed() OVERRIDE FINAL;
-
- // WebContentsDelegate implementation.
- virtual bool ShouldFocusPageAfterCrash() OVERRIDE FINAL;
- virtual bool PreHandleGestureEvent(
- content::WebContents* source,
- const blink::WebGestureEvent& event) OVERRIDE FINAL;
-
- content::WebContents* embedder_web_contents_;
- std::string embedder_extension_id_;
- int embedder_render_process_id_;
- content::BrowserContext* browser_context_;
- // |guest_instance_id_| is a profile-wide unique identifier for a guest
- // WebContents.
- const int guest_instance_id_;
- // |view_instance_id_| is an identifier that's unique within a particular
- // embedder RenderViewHost for a particular <*view> instance.
- int view_instance_id_;
-
- bool initialized_;
-
- // This is a queue of Events that are destined to be sent to the embedder once
- // the guest is attached to a particular embedder.
- std::deque<linked_ptr<Event> > pending_events_;
-
- // The opener guest view.
- base::WeakPtr<GuestViewBase> opener_;
-
- DestructionCallback destruction_callback_;
-
- // The extra parameters associated with this GuestView passed
- // in from JavaScript. This will typically be the view instance ID,
- // the API to use, and view-specific parameters. These parameters
- // are passed along to new guests that are created from this guest.
- scoped_ptr<base::DictionaryValue> extra_params_;
-
- scoped_ptr<EmbedderWebContentsObserver> embedder_web_contents_observer_;
-
- // The size of the container element.
- gfx::Size element_size_;
-
- // The size of the guest content. Note: In autosize mode, the container
- // element may not match the size of the guest.
- gfx::Size guest_size_;
-
- // Indicates whether autosize mode is enabled or not.
- bool auto_size_enabled_;
-
- // The maximum size constraints of the container element in autosize mode.
- gfx::Size max_auto_size_;
-
- // The minimum size constraints of the container element in autosize mode.
- gfx::Size min_auto_size_;
-
- // This is used to ensure pending tasks will not fire after this object is
- // destroyed.
- base::WeakPtrFactory<GuestViewBase> weak_ptr_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(GuestViewBase);
-};
-
-#endif // CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_BASE_H_
diff --git a/chrome/browser/guest_view/guest_view_manager.cc b/chrome/browser/guest_view/guest_view_manager.cc
deleted file mode 100644
index e9f2044..0000000
--- a/chrome/browser/guest_view/guest_view_manager.cc
+++ /dev/null
@@ -1,238 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/guest_view/guest_view_manager.h"
-
-#include "base/strings/stringprintf.h"
-#include "chrome/browser/guest_view/guest_view_base.h"
-#include "chrome/browser/guest_view/guest_view_manager_factory.h"
-#include "content/public/browser/browser_context.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/user_metrics.h"
-#include "content/public/browser/web_contents_observer.h"
-#include "content/public/common/result_codes.h"
-#include "content/public/common/url_constants.h"
-#include "extensions/browser/extension_system.h"
-#include "extensions/browser/guest_view/guest_view_constants.h"
-#include "net/base/escape.h"
-#include "url/gurl.h"
-
-using content::BrowserContext;
-using content::SiteInstance;
-using content::WebContents;
-
-// static
-GuestViewManagerFactory* GuestViewManager::factory_ = NULL;
-
-GuestViewManager::GuestViewManager(content::BrowserContext* context)
- : current_instance_id_(0), last_instance_id_removed_(0), context_(context) {
-}
-
-GuestViewManager::~GuestViewManager() {}
-
-// static.
-GuestViewManager* GuestViewManager::FromBrowserContext(
- BrowserContext* context) {
- GuestViewManager* guest_manager =
- static_cast<GuestViewManager*>(context->GetUserData(
- guestview::kGuestViewManagerKeyName));
- if (!guest_manager) {
- if (factory_) {
- guest_manager = factory_->CreateGuestViewManager(context);
- } else {
- guest_manager = new GuestViewManager(context);
- }
- context->SetUserData(guestview::kGuestViewManagerKeyName, guest_manager);
- }
- return guest_manager;
-}
-
-content::WebContents* GuestViewManager::GetGuestByInstanceIDSafely(
- int guest_instance_id,
- int embedder_render_process_id) {
- if (!CanEmbedderAccessInstanceIDMaybeKill(embedder_render_process_id,
- guest_instance_id)) {
- return NULL;
- }
- return GetGuestByInstanceID(guest_instance_id);
-}
-
-int GuestViewManager::GetNextInstanceID() {
- return ++current_instance_id_;
-}
-
-void GuestViewManager::CreateGuest(const std::string& view_type,
- const std::string& embedder_extension_id,
- content::WebContents* embedder_web_contents,
- const base::DictionaryValue& create_params,
- const WebContentsCreatedCallback& callback) {
- int guest_instance_id = GetNextInstanceID();
- GuestViewBase* guest =
- GuestViewBase::Create(context_, guest_instance_id, view_type);
- if (!guest) {
- callback.Run(NULL);
- return;
- }
- guest->Init(
- embedder_extension_id, embedder_web_contents, create_params, callback);
-}
-
-content::WebContents* GuestViewManager::CreateGuestWithWebContentsParams(
- const std::string& view_type,
- const std::string& embedder_extension_id,
- int embedder_render_process_id,
- const content::WebContents::CreateParams& create_params) {
- int guest_instance_id = GetNextInstanceID();
- GuestViewBase* guest =
- GuestViewBase::Create(context_, guest_instance_id, view_type);
- if (!guest)
- return NULL;
- content::WebContents::CreateParams guest_create_params(create_params);
- guest_create_params.guest_delegate = guest;
- content::WebContents* guest_web_contents =
- WebContents::Create(guest_create_params);
- guest->InitWithWebContents(embedder_extension_id,
- embedder_render_process_id,
- guest_web_contents);
- return guest_web_contents;
-}
-
-void GuestViewManager::MaybeGetGuestByInstanceIDOrKill(
- int guest_instance_id,
- int embedder_render_process_id,
- const GuestByInstanceIDCallback& callback) {
- if (!CanEmbedderAccessInstanceIDMaybeKill(embedder_render_process_id,
- guest_instance_id)) {
- // If we kill the embedder, then don't bother calling back.
- return;
- }
- content::WebContents* guest_web_contents =
- GetGuestByInstanceID(guest_instance_id);
- callback.Run(guest_web_contents);
-}
-
-SiteInstance* GuestViewManager::GetGuestSiteInstance(
- const GURL& guest_site) {
- for (GuestInstanceMap::const_iterator it =
- guest_web_contents_by_instance_id_.begin();
- it != guest_web_contents_by_instance_id_.end(); ++it) {
- if (it->second->GetSiteInstance()->GetSiteURL() == guest_site)
- return it->second->GetSiteInstance();
- }
- return NULL;
-}
-
-bool GuestViewManager::ForEachGuest(WebContents* embedder_web_contents,
- const GuestCallback& callback) {
- for (GuestInstanceMap::iterator it =
- guest_web_contents_by_instance_id_.begin();
- it != guest_web_contents_by_instance_id_.end(); ++it) {
- WebContents* guest = it->second;
- GuestViewBase* guest_view = GuestViewBase::FromWebContents(guest);
- if (embedder_web_contents != guest_view->embedder_web_contents())
- continue;
-
- if (callback.Run(guest))
- return true;
- }
- return false;
-}
-
-void GuestViewManager::AddGuest(int guest_instance_id,
- WebContents* guest_web_contents) {
- CHECK(!ContainsKey(guest_web_contents_by_instance_id_, guest_instance_id));
- CHECK(CanUseGuestInstanceID(guest_instance_id));
- guest_web_contents_by_instance_id_[guest_instance_id] = guest_web_contents;
-}
-
-void GuestViewManager::RemoveGuest(int guest_instance_id) {
- GuestInstanceMap::iterator it =
- guest_web_contents_by_instance_id_.find(guest_instance_id);
- DCHECK(it != guest_web_contents_by_instance_id_.end());
- guest_web_contents_by_instance_id_.erase(it);
-
- // All the instance IDs that lie within [0, last_instance_id_removed_]
- // are invalid.
- // The remaining sparse invalid IDs are kept in |removed_instance_ids_| set.
- // The following code compacts the set by incrementing
- // |last_instance_id_removed_|.
- if (guest_instance_id == last_instance_id_removed_ + 1) {
- ++last_instance_id_removed_;
- // Compact.
- std::set<int>::iterator iter = removed_instance_ids_.begin();
- while (iter != removed_instance_ids_.end()) {
- int instance_id = *iter;
- // The sparse invalid IDs must not lie within
- // [0, last_instance_id_removed_]
- DCHECK(instance_id > last_instance_id_removed_);
- if (instance_id != last_instance_id_removed_ + 1)
- break;
- ++last_instance_id_removed_;
- removed_instance_ids_.erase(iter++);
- }
- } else {
- removed_instance_ids_.insert(guest_instance_id);
- }
-}
-
-content::WebContents* GuestViewManager::GetGuestByInstanceID(
- int guest_instance_id) {
- GuestInstanceMap::const_iterator it =
- guest_web_contents_by_instance_id_.find(guest_instance_id);
- if (it == guest_web_contents_by_instance_id_.end())
- return NULL;
- return it->second;
-}
-
-bool GuestViewManager::CanEmbedderAccessInstanceIDMaybeKill(
- int embedder_render_process_id,
- int guest_instance_id) {
- if (!CanEmbedderAccessInstanceID(embedder_render_process_id,
- guest_instance_id)) {
- // The embedder process is trying to access a guest it does not own.
- content::RecordAction(
- base::UserMetricsAction("BadMessageTerminate_BPGM"));
- base::KillProcess(
- content::RenderProcessHost::FromID(embedder_render_process_id)->
- GetHandle(),
- content::RESULT_CODE_KILLED_BAD_MESSAGE, false);
- return false;
- }
- return true;
-}
-
-bool GuestViewManager::CanUseGuestInstanceID(int guest_instance_id) {
- if (guest_instance_id <= last_instance_id_removed_)
- return false;
- return !ContainsKey(removed_instance_ids_, guest_instance_id);
-}
-
-bool GuestViewManager::CanEmbedderAccessInstanceID(
- int embedder_render_process_id,
- int guest_instance_id) {
- // The embedder is trying to access a guest with a negative or zero
- // instance ID.
- if (guest_instance_id <= guestview::kInstanceIDNone)
- return false;
-
- // The embedder is trying to access an instance ID that has not yet been
- // allocated by GuestViewManager. This could cause instance ID
- // collisions in the future, and potentially give one embedder access to a
- // guest it does not own.
- if (guest_instance_id > current_instance_id_)
- return false;
-
- // We might get some late arriving messages at tear down. Let's let the
- // embedder tear down in peace.
- GuestInstanceMap::const_iterator it =
- guest_web_contents_by_instance_id_.find(guest_instance_id);
- if (it == guest_web_contents_by_instance_id_.end())
- return true;
-
- GuestViewBase* guest_view = GuestViewBase::FromWebContents(it->second);
- if (!guest_view)
- return false;
-
- return embedder_render_process_id == guest_view->embedder_render_process_id();
-}
diff --git a/chrome/browser/guest_view/guest_view_manager.h b/chrome/browser/guest_view/guest_view_manager.h
deleted file mode 100644
index 8b32ed9c..0000000
--- a/chrome/browser/guest_view/guest_view_manager.h
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_MANAGER_H_
-#define CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_MANAGER_H_
-
-#include <map>
-
-#include "base/gtest_prod_util.h"
-#include "base/lazy_instance.h"
-#include "base/macros.h"
-#include "content/public/browser/browser_plugin_guest_manager.h"
-#include "content/public/browser/site_instance.h"
-#include "content/public/browser/web_contents.h"
-
-class GuestViewBase;
-class GuestViewManagerFactory;
-class GURL;
-
-namespace content {
-class BrowserContext;
-class WebContents;
-} // namespace content
-
-class GuestViewManager : public content::BrowserPluginGuestManager,
- public base::SupportsUserData::Data {
- public:
- explicit GuestViewManager(content::BrowserContext* context);
- virtual ~GuestViewManager();
-
- static GuestViewManager* FromBrowserContext(content::BrowserContext* context);
-
- // Overrides factory for testing. Default (NULL) value indicates regular
- // (non-test) environment.
- static void set_factory_for_testing(GuestViewManagerFactory* factory) {
- GuestViewManager::factory_ = factory;
- }
- // Returns the guest WebContents associated with the given |guest_instance_id|
- // if the provided |embedder_render_process_id| is allowed to access it.
- // If the embedder is not allowed access, the embedder will be killed, and
- // this method will return NULL. If no WebContents exists with the given
- // instance ID, then NULL will also be returned.
- content::WebContents* GetGuestByInstanceIDSafely(
- int guest_instance_id,
- int embedder_render_process_id);
-
- int GetNextInstanceID();
-
- typedef base::Callback<void(content::WebContents*)>
- WebContentsCreatedCallback;
- void CreateGuest(const std::string& view_type,
- const std::string& embedder_extension_id,
- content::WebContents* embedder_web_contents,
- const base::DictionaryValue& create_params,
- const WebContentsCreatedCallback& callback);
-
- content::WebContents* CreateGuestWithWebContentsParams(
- const std::string& view_type,
- const std::string& embedder_extension_id,
- int embedder_render_process_id,
- const content::WebContents::CreateParams& create_params);
-
- content::SiteInstance* GetGuestSiteInstance(
- const GURL& guest_site);
-
- // BrowserPluginGuestManager implementation.
- virtual void MaybeGetGuestByInstanceIDOrKill(
- int guest_instance_id,
- int embedder_render_process_id,
- const GuestByInstanceIDCallback& callback) OVERRIDE;
- virtual bool ForEachGuest(content::WebContents* embedder_web_contents,
- const GuestCallback& callback) OVERRIDE;
-
- protected:
- friend class GuestViewBase;
- FRIEND_TEST_ALL_PREFIXES(GuestViewManagerTest, AddRemove);
-
- // Can be overriden in tests.
- virtual void AddGuest(int guest_instance_id,
- content::WebContents* guest_web_contents);
-
- void RemoveGuest(int guest_instance_id);
-
- content::WebContents* GetGuestByInstanceID(int guest_instance_id);
-
- bool CanEmbedderAccessInstanceIDMaybeKill(
- int embedder_render_process_id,
- int guest_instance_id);
-
- bool CanEmbedderAccessInstanceID(int embedder_render_process_id,
- int guest_instance_id);
-
- // Returns true if |guest_instance_id| can be used to add a new guest to this
- // manager.
- // We disallow adding new guest with instance IDs that were previously removed
- // from this manager using RemoveGuest.
- bool CanUseGuestInstanceID(int guest_instance_id);
-
- // Static factory instance (always NULL for non-test).
- static GuestViewManagerFactory* factory_;
-
- // Contains guests' WebContents, mapping from their instance ids.
- typedef std::map<int, content::WebContents*> GuestInstanceMap;
- GuestInstanceMap guest_web_contents_by_instance_id_;
-
- int current_instance_id_;
-
- // Any instance ID whose number not greater than this was removed via
- // RemoveGuest.
- // This is used so that we don't have store all removed instance IDs in
- // |removed_instance_ids_|.
- int last_instance_id_removed_;
- // The remaining instance IDs that are greater than
- // |last_instance_id_removed_| are kept here.
- std::set<int> removed_instance_ids_;
-
- content::BrowserContext* context_;
-
- DISALLOW_COPY_AND_ASSIGN(GuestViewManager);
-};
-
-#endif // CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_MANAGER_H_
diff --git a/chrome/browser/guest_view/guest_view_manager_factory.h b/chrome/browser/guest_view/guest_view_manager_factory.h
deleted file mode 100644
index dbd6cb8..0000000
--- a/chrome/browser/guest_view/guest_view_manager_factory.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_MANAGER_FACTORY_H_
-#define CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_MANAGER_FACTORY_H_
-
-class GuestViewManagerFactory {
- public:
- virtual GuestViewManager* CreateGuestViewManager(
- content::BrowserContext* context) = 0;
-
- protected:
- virtual ~GuestViewManagerFactory() {}
-};
-
-#endif // CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_MANAGER_FACTORY_H_
-
diff --git a/chrome/browser/guest_view/guest_view_manager_unittest.cc b/chrome/browser/guest_view/guest_view_manager_unittest.cc
deleted file mode 100644
index 05b53d5..0000000
--- a/chrome/browser/guest_view/guest_view_manager_unittest.cc
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/guest_view/guest_view_manager.h"
-
-#include "chrome/test/base/testing_profile.h"
-#include "content/public/test/test_browser_thread_bundle.h"
-#include "content/public/test/web_contents_tester.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using content::WebContents;
-using content::WebContentsTester;
-
-namespace guestview {
-
-// This class allows us to access some private variables in
-// GuestViewManager.
-class TestGuestViewManager : public GuestViewManager {
- public:
- explicit TestGuestViewManager(content::BrowserContext* context)
- : GuestViewManager(context) {}
-
- int last_instance_id_removed_for_testing() {
- return last_instance_id_removed_;
- }
-
- size_t GetRemovedInstanceIdSize() { return removed_instance_ids_.size(); }
-
- private:
- using GuestViewManager::last_instance_id_removed_;
- using GuestViewManager::removed_instance_ids_;
-
- DISALLOW_COPY_AND_ASSIGN(TestGuestViewManager);
-};
-
-} // namespace guestview
-
-namespace {
-
-class GuestViewManagerTest : public testing::Test {
- public:
- GuestViewManagerTest() {}
- virtual ~GuestViewManagerTest() {}
-
- scoped_ptr<WebContents> CreateWebContents() {
- return scoped_ptr<WebContents>(
- WebContentsTester::CreateTestWebContents(&profile_, NULL));
- }
-
- private:
- content::TestBrowserThreadBundle thread_bundle_;
- TestingProfile profile_;
-
- DISALLOW_COPY_AND_ASSIGN(GuestViewManagerTest);
-};
-
-} // namespace
-
-TEST_F(GuestViewManagerTest, AddRemove) {
- TestingProfile profile;
- scoped_ptr<guestview::TestGuestViewManager> manager(
- new guestview::TestGuestViewManager(&profile));
-
- scoped_ptr<WebContents> web_contents1(CreateWebContents());
- scoped_ptr<WebContents> web_contents2(CreateWebContents());
- scoped_ptr<WebContents> web_contents3(CreateWebContents());
-
- EXPECT_EQ(0, manager->last_instance_id_removed_for_testing());
-
- EXPECT_TRUE(manager->CanUseGuestInstanceID(1));
- EXPECT_TRUE(manager->CanUseGuestInstanceID(2));
- EXPECT_TRUE(manager->CanUseGuestInstanceID(3));
-
- manager->AddGuest(1, web_contents1.get());
- manager->AddGuest(2, web_contents2.get());
- manager->RemoveGuest(2);
-
- // Since we removed 2, it would be an invalid ID.
- EXPECT_TRUE(manager->CanUseGuestInstanceID(1));
- EXPECT_FALSE(manager->CanUseGuestInstanceID(2));
- EXPECT_TRUE(manager->CanUseGuestInstanceID(3));
-
- EXPECT_EQ(0, manager->last_instance_id_removed_for_testing());
-
- EXPECT_TRUE(manager->CanUseGuestInstanceID(3));
-
- manager->AddGuest(3, web_contents3.get());
- manager->RemoveGuest(1);
- EXPECT_FALSE(manager->CanUseGuestInstanceID(1));
- EXPECT_FALSE(manager->CanUseGuestInstanceID(2));
-
- EXPECT_EQ(2, manager->last_instance_id_removed_for_testing());
- manager->RemoveGuest(3);
- EXPECT_EQ(3, manager->last_instance_id_removed_for_testing());
-
- EXPECT_FALSE(manager->CanUseGuestInstanceID(1));
- EXPECT_FALSE(manager->CanUseGuestInstanceID(2));
- EXPECT_FALSE(manager->CanUseGuestInstanceID(3));
-
- EXPECT_EQ(0u, manager->GetRemovedInstanceIdSize());
-}
diff --git a/chrome/browser/guest_view/web_view/javascript_dialog_helper.cc b/chrome/browser/guest_view/web_view/javascript_dialog_helper.cc
index c6dc2f6..6fe90b1 100644
--- a/chrome/browser/guest_view/web_view/javascript_dialog_helper.cc
+++ b/chrome/browser/guest_view/web_view/javascript_dialog_helper.cc
@@ -12,6 +12,8 @@
#include "chrome/browser/guest_view/web_view/web_view_permission_types.h"
#include "extensions/browser/guest_view/guest_view_constants.h"
+namespace extensions {
+
namespace {
std::string JavaScriptMessageTypeToString(
@@ -100,3 +102,5 @@ void JavaScriptDialogHelper::OnPermissionResponse(
callback.Run(allow && web_view_guest_->attached(),
base::UTF8ToUTF16(user_input));
}
+
+} // namespace extensions
diff --git a/chrome/browser/guest_view/web_view/javascript_dialog_helper.h b/chrome/browser/guest_view/web_view/javascript_dialog_helper.h
index 7f37002..654b0a2 100644
--- a/chrome/browser/guest_view/web_view/javascript_dialog_helper.h
+++ b/chrome/browser/guest_view/web_view/javascript_dialog_helper.h
@@ -7,6 +7,8 @@
#include "content/public/browser/javascript_dialog_manager.h"
+namespace extensions {
+
class WebViewGuest;
class JavaScriptDialogHelper : public content::JavaScriptDialogManager {
@@ -50,4 +52,6 @@ class JavaScriptDialogHelper : public content::JavaScriptDialogManager {
DISALLOW_COPY_AND_ASSIGN(JavaScriptDialogHelper);
};
+} // namespace extensions
+
#endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_JAVASCRIPT_DIALOG_HELPER_H_
diff --git a/chrome/browser/guest_view/web_view/web_view_find_helper.cc b/chrome/browser/guest_view/web_view/web_view_find_helper.cc
index 229565b4..b2a5e99 100644
--- a/chrome/browser/guest_view/web_view/web_view_find_helper.cc
+++ b/chrome/browser/guest_view/web_view/web_view_find_helper.cc
@@ -9,6 +9,8 @@
#include "chrome/browser/extensions/api/web_view/web_view_internal_api.h"
#include "chrome/browser/guest_view/web_view/web_view_constants.h"
+namespace extensions {
+
WebViewFindHelper::WebViewFindHelper(WebViewGuest* webview_guest)
: webview_guest_(webview_guest), current_find_request_id_(0) {
}
@@ -276,3 +278,5 @@ void WebViewFindHelper::FindInfo::SendResponse(bool canceled) {
find_function_->SetResult(results.DeepCopy());
find_function_->SendResponse(true);
}
+
+} // namespace extensions
diff --git a/chrome/browser/guest_view/web_view/web_view_find_helper.h b/chrome/browser/guest_view/web_view/web_view_find_helper.h
index 9d4d74c..eac5ab8 100644
--- a/chrome/browser/guest_view/web_view/web_view_find_helper.h
+++ b/chrome/browser/guest_view/web_view/web_view_find_helper.h
@@ -16,7 +16,6 @@
namespace extensions {
class WebViewInternalFindFunction;
-} // namespace extensions
class WebViewGuest;
// Helper class for find requests and replies for the web_view_internal find
@@ -186,4 +185,6 @@ class WebViewFindHelper {
DISALLOW_COPY_AND_ASSIGN(WebViewFindHelper);
};
+} // namespace extensions
+
#endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_FIND_HELPER_H_
diff --git a/chrome/browser/guest_view/web_view/web_view_guest.cc b/chrome/browser/guest_view/web_view/web_view_guest.cc
index 181749e..87cffee 100644
--- a/chrome/browser/guest_view/web_view/web_view_guest.cc
+++ b/chrome/browser/guest_view/web_view/web_view_guest.cc
@@ -14,7 +14,6 @@
#include "chrome/browser/extensions/menu_manager.h"
#include "chrome/browser/extensions/script_executor.h"
#include "chrome/browser/favicon/favicon_tab_helper.h"
-#include "chrome/browser/guest_view/guest_view_manager.h"
#include "chrome/browser/guest_view/web_view/web_view_constants.h"
#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h"
#include "chrome/browser/guest_view/web_view/web_view_permission_types.h"
@@ -49,6 +48,7 @@
#include "content/public/common/url_constants.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/guest_view/guest_view_constants.h"
+#include "extensions/browser/guest_view/guest_view_manager.h"
#include "extensions/common/constants.h"
#include "ipc/ipc_message_macros.h"
#include "net/base/escape.h"
@@ -74,6 +74,8 @@ using content::RenderFrameHost;
using content::ResourceType;
using content::WebContents;
+namespace extensions {
+
namespace {
std::string WindowOpenDispositionToString(
@@ -1259,3 +1261,5 @@ void WebViewGuest::OnWebViewNewWindowResponse(
if (!allow)
guest->Destroy();
}
+
+} // namespace extensions
diff --git a/chrome/browser/guest_view/web_view/web_view_guest.h b/chrome/browser/guest_view/web_view/web_view_guest.h
index 39e3c72..1ddda0c 100644
--- a/chrome/browser/guest_view/web_view/web_view_guest.h
+++ b/chrome/browser/guest_view/web_view/web_view_guest.h
@@ -9,7 +9,6 @@
#include "base/observer_list.h"
#include "chrome/browser/extensions/tab_helper.h"
-#include "chrome/browser/guest_view/guest_view.h"
#include "chrome/browser/guest_view/web_view/javascript_dialog_helper.h"
#include "chrome/browser/guest_view/web_view/web_view_find_helper.h"
#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h"
@@ -17,6 +16,7 @@
#include "chrome/common/extensions/api/web_view_internal.h"
#include "content/public/browser/javascript_dialog_manager.h"
#include "content/public/browser/notification_registrar.h"
+#include "extensions/browser/guest_view/guest_view.h"
#include "third_party/WebKit/public/web/WebFindOptions.h"
#if defined(OS_CHROMEOS)
@@ -27,15 +27,14 @@ namespace webview_api = extensions::api::web_view_internal;
class RenderViewContextMenu;
-namespace extensions {
-class ScriptExecutor;
-class WebViewInternalFindFunction;
-} // namespace extensions
-
namespace ui {
class SimpleMenuModel;
} // namespace ui
+namespace extensions {
+class ScriptExecutor;
+class WebViewInternalFindFunction;
+
// A WebViewGuest provides the browser-side implementation of the <webview> API
// and manages the dispatch of <webview> extension events. WebViewGuest is
// created on attachment. That is, when a guest WebContents is associated with
@@ -399,4 +398,6 @@ class WebViewGuest : public GuestView<WebViewGuest>,
DISALLOW_COPY_AND_ASSIGN(WebViewGuest);
};
+} // namespace extensions
+
#endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_GUEST_H_
diff --git a/chrome/browser/guest_view/web_view/web_view_permission_helper.cc b/chrome/browser/guest_view/web_view/web_view_permission_helper.cc
index c5b0aaa..14422cf 100644
--- a/chrome/browser/guest_view/web_view/web_view_permission_helper.cc
+++ b/chrome/browser/guest_view/web_view/web_view_permission_helper.cc
@@ -20,6 +20,8 @@
using content::BrowserPluginGuestDelegate;
using content::RenderViewHost;
+namespace extensions {
+
namespace {
static std::string PermissionTypeToString(WebViewPermissionType type) {
switch (type) {
@@ -597,3 +599,5 @@ WebViewPermissionHelper::PermissionResponseInfo::PermissionResponseInfo(
WebViewPermissionHelper::PermissionResponseInfo::~PermissionResponseInfo() {
}
+
+} // namespace extensions
diff --git a/chrome/browser/guest_view/web_view/web_view_permission_helper.h b/chrome/browser/guest_view/web_view/web_view_permission_helper.h
index 6dcba88..76ed36e 100644
--- a/chrome/browser/guest_view/web_view/web_view_permission_helper.h
+++ b/chrome/browser/guest_view/web_view/web_view_permission_helper.h
@@ -15,6 +15,8 @@
using base::UserMetricsAction;
+namespace extensions {
+
class WebViewGuest;
// WebViewPermissionHelper manages <webview> permission requests. This helper
@@ -211,4 +213,6 @@ class WebViewPermissionHelper
DISALLOW_COPY_AND_ASSIGN(WebViewPermissionHelper);
};
+} // namespace extensions
+
#endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_PERMISSION_HELPER_H_
diff --git a/chrome/browser/guest_view/web_view/web_view_renderer_state.cc b/chrome/browser/guest_view/web_view/web_view_renderer_state.cc
index 6ff54c8..89c0f6e 100644
--- a/chrome/browser/guest_view/web_view/web_view_renderer_state.cc
+++ b/chrome/browser/guest_view/web_view/web_view_renderer_state.cc
@@ -7,6 +7,8 @@
using content::BrowserThread;
+namespace extensions {
+
// static
WebViewRendererState* WebViewRendererState::GetInstance() {
return Singleton<WebViewRendererState>::get();
@@ -79,3 +81,5 @@ bool WebViewRendererState::GetPartitionID(int guest_process_id,
}
return false;
}
+
+} // namespace extensions
diff --git a/chrome/browser/guest_view/web_view/web_view_renderer_state.h b/chrome/browser/guest_view/web_view/web_view_renderer_state.h
index a0325e0..ab785e7 100644
--- a/chrome/browser/guest_view/web_view/web_view_renderer_state.h
+++ b/chrome/browser/guest_view/web_view/web_view_renderer_state.h
@@ -11,6 +11,8 @@
#include "base/memory/singleton.h"
+namespace extensions {
+
class WebViewGuest;
// This class keeps track of <webview> renderer state for use on the IO thread.
@@ -70,4 +72,6 @@ class WebViewRendererState {
DISALLOW_COPY_AND_ASSIGN(WebViewRendererState);
};
+} // namespace extensions
+
#endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_RENDERER_STATE_H_