summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk
diff options
context:
space:
mode:
authorjohnnyg@chromium.org <johnnyg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-23 23:39:09 +0000
committerjohnnyg@chromium.org <johnnyg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-23 23:39:09 +0000
commit9e9e55c35954a06b68d5e62a27fa1ea60675d6f2 (patch)
treeaa031fb90182ccd30df76f9d7947c36799ec611d /chrome/browser/gtk
parent475b996b15bd1010869876e6d70e4c79bc1fea05 (diff)
downloadchromium_src-9e9e55c35954a06b68d5e62a27fa1ea60675d6f2.zip
chromium_src-9e9e55c35954a06b68d5e62a27fa1ea60675d6f2.tar.gz
chromium_src-9e9e55c35954a06b68d5e62a27fa1ea60675d6f2.tar.bz2
Refactor BalloonViewHost, removing a lot of duplicate code that crept into notifications during the port to mac & linux and making behavior more consistent.
BUG=34826 TEST=notifications on each platform. Review URL: http://codereview.chromium.org/1055005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42404 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk')
-rw-r--r--chrome/browser/gtk/notifications/balloon_view_host_gtk.cc126
-rw-r--r--chrome/browser/gtk/notifications/balloon_view_host_gtk.h113
2 files changed, 19 insertions, 220 deletions
diff --git a/chrome/browser/gtk/notifications/balloon_view_host_gtk.cc b/chrome/browser/gtk/notifications/balloon_view_host_gtk.cc
index b8f3e96..3a3afee 100644
--- a/chrome/browser/gtk/notifications/balloon_view_host_gtk.cc
+++ b/chrome/browser/gtk/notifications/balloon_view_host_gtk.cc
@@ -4,139 +4,31 @@
#include "chrome/browser/gtk/notifications/balloon_view_host_gtk.h"
-#include "base/string_util.h"
-#include "chrome/browser/browser_list.h"
-#include "chrome/browser/in_process_webkit/dom_storage_context.h"
-#include "chrome/browser/in_process_webkit/webkit_context.h"
#include "chrome/browser/notifications/balloon.h"
-#include "chrome/browser/notifications/notification.h"
-#include "chrome/browser/profile.h"
#include "chrome/browser/renderer_host/render_view_host.h"
#include "chrome/browser/renderer_host/render_widget_host_view.h"
#include "chrome/browser/renderer_host/render_widget_host_view_gtk.h"
-#include "chrome/browser/renderer_host/site_instance.h"
-#include "chrome/browser/renderer_preferences_util.h"
-#include "chrome/common/notification_service.h"
-#include "chrome/common/notification_type.h"
-#include "chrome/common/render_messages.h"
-#include "chrome/common/renderer_preferences.h"
BalloonViewHost::BalloonViewHost(Balloon* balloon)
- : initialized_(false),
- balloon_(balloon),
- site_instance_(SiteInstance::CreateSiteInstance(balloon->profile())),
- render_view_host_(NULL),
- should_notify_on_disconnect_(false) {
- DCHECK(balloon_);
-}
-
-void BalloonViewHost::Shutdown() {
- if (render_view_host_) {
- render_view_host_->Shutdown();
- render_view_host_ = NULL;
- }
-}
-
-WebPreferences BalloonViewHost::GetWebkitPrefs() {
- WebPreferences prefs;
- prefs.allow_scripts_to_close_windows = true;
- return prefs;
-}
-
-RendererPreferences BalloonViewHost::GetRendererPrefs(Profile* profile) const {
- RendererPreferences prefs;
- renderer_preferences_util::UpdateFromSystemSettings(&prefs, profile);
- // We want links (a.k.a. top_level_requests) to be forwarded to the browser so
- // that we can open them in a new tab rather than in the balloon.
- prefs.browser_handles_top_level_requests = true;
- return prefs;
-}
-
-void BalloonViewHost::RequestOpenURL(const GURL& url,
- const GURL& referrer,
- WindowOpenDisposition disposition) {
- // Always open a link triggered within the notification balloon in a new tab.
- // TODO(johnnyg): this new tab should always be in the same workspace as the
- // notification.
- BrowserList::GetLastActive()->AddTabWithURL(url, referrer,
- PageTransition::LINK, true, 0, 0, GetSiteInstance());
-}
-
-void BalloonViewHost::Close(RenderViewHost* render_view_host) {
- balloon_->CloseByScript();
-}
-
-void BalloonViewHost::RenderViewCreated(RenderViewHost* render_view_host) {
- render_view_host->Send(new ViewMsg_EnablePreferredSizeChangedMode(
- render_view_host->routing_id()));
-}
-
-void BalloonViewHost::RendererReady(RenderViewHost* render_view_host) {
- should_notify_on_disconnect_ = true;
- NotificationService::current()->Notify(
- NotificationType::NOTIFY_BALLOON_CONNECTED,
- Source<Balloon>(balloon_), NotificationService::NoDetails());
-}
-
-void BalloonViewHost::RendererGone(RenderViewHost* render_view_host) {
- if (!should_notify_on_disconnect_)
- return;
-
- should_notify_on_disconnect_ = false;
- NotificationService::current()->Notify(
- NotificationType::NOTIFY_BALLOON_DISCONNECTED,
- Source<Balloon>(balloon_), NotificationService::NoDetails());
-}
-
-// RenderViewHostDelegate::View methods implemented to allow links to
-// open pages in new tabs.
-void BalloonViewHost::CreateNewWindow(int route_id) {
- delegate_view_helper_.CreateNewWindow(
- route_id, balloon_->profile(), site_instance_.get(),
- DOMUIFactory::GetDOMUIType(balloon_->notification().content_url()), NULL);
-}
-
-void BalloonViewHost::ShowCreatedWindow(int route_id,
- WindowOpenDisposition disposition,
- const gfx::Rect& initial_pos,
- bool user_gesture) {
- // Don't allow pop-ups from notifications.
- if (disposition == NEW_POPUP)
- return;
-
- TabContents* contents = delegate_view_helper_.GetCreatedWindow(route_id);
- if (contents) {
- Browser* browser = BrowserList::GetLastActive();
- browser->AddTabContents(contents, disposition, initial_pos, user_gesture);
- }
-}
-
-void BalloonViewHost::UpdatePreferredSize(const gfx::Size& new_size) {
- balloon_->SetContentPreferredSize(new_size);
+ : BalloonHost(balloon) {
}
void BalloonViewHost::UpdateActualSize(const gfx::Size& new_size) {
render_widget_host_view_->SetSize(new_size);
- // gfx::Size(new_size.width(), new_size.height()));
gtk_widget_set_size_request(
native_view(), new_size.width(), new_size.height());
}
-void BalloonViewHost::Init() {
- DCHECK(!render_view_host_) << "BalloonViewHost already initialized.";
-
- int64 session_storage_namespace_id = balloon_->profile()->GetWebKitContext()->
- dom_storage_context()->AllocateSessionStorageNamespaceId();
-
- render_view_host_ = new RenderViewHost(site_instance_.get(),
- this, MSG_ROUTING_NONE,
- session_storage_namespace_id);
+gfx::NativeView BalloonViewHost::native_view() const {
+ return render_widget_host_view_->native_view();
+}
+void BalloonViewHost::InitRenderWidgetHostView() {
+ DCHECK(render_view_host_);
render_widget_host_view_ = new RenderWidgetHostViewGtk(render_view_host_);
render_widget_host_view_->InitAsChild();
+}
- render_view_host_->set_view(render_widget_host_view_);
- render_view_host_->CreateRenderView(GetProfile()->GetRequestContext());
- render_view_host_->NavigateToURL(balloon_->notification().content_url());
- initialized_ = true;
+RenderWidgetHostView* BalloonViewHost::render_widget_host_view() const {
+ return render_widget_host_view_;
}
diff --git a/chrome/browser/gtk/notifications/balloon_view_host_gtk.h b/chrome/browser/gtk/notifications/balloon_view_host_gtk.h
index de71a41..833a78c 100644
--- a/chrome/browser/gtk/notifications/balloon_view_host_gtk.h
+++ b/chrome/browser/gtk/notifications/balloon_view_host_gtk.h
@@ -5,25 +5,16 @@
#ifndef CHROME_BROWSER_GTK_NOTIFICATIONS_BALLOON_VIEW_HOST_GTK_H_
#define CHROME_BROWSER_GTK_NOTIFICATIONS_BALLOON_VIEW_HOST_GTK_H_
-#include "chrome/browser/gtk/extension_view_gtk.h"
-#include "chrome/browser/notifications/balloon.h"
-#include "chrome/browser/notifications/notification.h"
-#include "chrome/browser/renderer_host/render_view_host_delegate.h"
-#include "chrome/browser/renderer_host/render_widget_host_view_gtk.h"
-#include "chrome/browser/renderer_host/site_instance.h"
-#include "chrome/browser/tab_contents/render_view_host_delegate_helper.h"
+#include "chrome/browser/notifications/balloon_host.h"
#include "gfx/native_widget_types.h"
-#include "webkit/glue/webpreferences.h"
-class Profile;
-class RenderViewHost;
+class RenderWidgetHostViewGtk;
// BalloonViewHost class is a delegate to the renderer host for the HTML
// notification. When initialized it creates a new RenderViewHost and loads
// the contents of the toast into it. It also handles links within the toast,
// loading them into a new tab.
-class BalloonViewHost : public RenderViewHostDelegate,
- public RenderViewHostDelegate::View {
+class BalloonViewHost : public BalloonHost {
public:
explicit BalloonViewHost(Balloon* balloon);
@@ -31,104 +22,20 @@ class BalloonViewHost : public RenderViewHostDelegate,
Shutdown();
}
- // Initialize the view.
- void Init();
-
- // Stops showing the balloon.
- void Shutdown();
-
- // RenderViewHostDelegate overrides.
- virtual WebPreferences GetWebkitPrefs();
- virtual RendererPreferences GetRendererPrefs(Profile* profile) const;
- virtual SiteInstance* GetSiteInstance() const {
- return site_instance_.get();
- }
- virtual Profile* GetProfile() const { return balloon_->profile(); }
- virtual const GURL& GetURL() const {
- return balloon_->notification().content_url();
- }
- virtual void RequestOpenURL(const GURL& url, const GURL& referrer,
- WindowOpenDisposition disposition);
- virtual void Close(RenderViewHost* render_view_host);
- virtual void RenderViewCreated(RenderViewHost* render_view_host);
- virtual void DidStopLoading() {}
- virtual void RendererReady(RenderViewHost* render_view_host);
- virtual void RendererGone(RenderViewHost* render_view_host);
- virtual void UpdateTitle(RenderViewHost* /* render_view_host */,
- int32 /* page_id */, const std::wstring& title) {
- title_ = title;
- }
- virtual int GetBrowserWindowID() const { return -1; }
- virtual ViewType::Type GetRenderViewType() const {
- return ViewType::TAB_CONTENTS;
- }
- virtual RenderViewHostDelegate::View* GetViewDelegate() {
- return this;
- }
-
+ // Changes the size of the balloon.
void UpdateActualSize(const gfx::Size& new_size);
- // RenderViewHostDelegate::View methods. Only the ones for opening new
- // windows are currently implemented.
- virtual void CreateNewWindow(int route_id);
- virtual void CreateNewWidget(int route_id, bool activatable) {}
- virtual void ShowCreatedWindow(int route_id,
- WindowOpenDisposition disposition,
- const gfx::Rect& initial_pos,
- bool user_gesture);
- virtual void ShowCreatedWidget(int route_id,
- const gfx::Rect& initial_pos) {}
- virtual void ShowContextMenu(const ContextMenuParams& params) {}
- virtual void StartDragging(const WebDropData& drop_data,
- WebKit::WebDragOperationsMask allowed_ops,
- const SkBitmap& image,
- const gfx::Point& image_offset) {}
- virtual void UpdateDragCursor(WebKit::WebDragOperation operation) {}
- virtual void GotFocus() {}
- virtual void TakeFocus(bool reverse) {}
- virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event,
- bool* is_keyboard_shortcut) {
- return false;
- }
- virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {}
- virtual void HandleMouseEvent() {}
- virtual void HandleMouseLeave() {}
- virtual void UpdatePreferredSize(const gfx::Size& pref_size);
-
// Accessors.
- RenderViewHost* render_view_host() const { return render_view_host_; }
- gfx::NativeView native_view() const {
- return render_widget_host_view_->native_view();
- }
- const std::wstring& title() const { return title_; }
-
- private:
- // True after Init() has completed.
- bool initialized_;
-
- // Non-owned pointer to the associated balloon.
- Balloon* balloon_;
-
- // Site instance for the balloon/profile, to be used for opening new links.
- scoped_refptr<SiteInstance> site_instance_;
+ gfx::NativeView native_view() const;
- // Owned pointer to to host for the renderer process.
- RenderViewHost* render_view_host_;
+ protected:
+ virtual void InitRenderWidgetHostView();
+ virtual RenderWidgetHostView* render_widget_host_view() const;
- // Indicates whether we should notify about disconnection of this balloon.
- // This is used to ensure disconnection notifications only happen if
- // a connection notification has happened and that they happen only once.
- bool should_notify_on_disconnect_;
-
- // The title of the balloon page.
- std::wstring title_;
-
- // The GTK-specific widget host view.
+ private:
+ // The GTK-specific widget host view. Owned by its native view.
RenderWidgetHostViewGtk* render_widget_host_view_;
- // Common implementations of some RenderViewHostDelegate::View methods.
- RenderViewHostDelegateViewHelper delegate_view_helper_;
-
DISALLOW_COPY_AND_ASSIGN(BalloonViewHost);
};