diff options
Diffstat (limited to 'chrome/browser/guest_view')
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_ |