From 132db96c5f8dba976c631e2ff56180a5d92f9dc9 Mon Sep 17 00:00:00 2001 From: "tonyg@chromium.org" Date: Thu, 27 May 2010 02:43:20 +0000 Subject: Revert 48348 - Broke ui_tests on linux. The desktop notification service infobar would not display in ChromeFrame rendered pages as the code assumed the existing of a BrowserList and associated objects like Browser etc. In ChromeFrame the tab contents is owned by the ExternalTabContainer. Fix is to pass the current tab contents from the RenderViewHost to the DesktopNotificationService::RequestPermission function and use that if we don't have a browser list. Fixes bug http://code.google.com/p/chromium/issues/detail?id=44913 Bug=44913 Review URL: http://codereview.chromium.org/2294002 TBR=ananta@chromium.org Review URL: http://codereview.chromium.org/2222005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48354 0039d316-1c4b-4281-b951-d872f2087c98 --- .../browser/notifications/desktop_notification_service.cc | 13 ++++++++++--- chrome/browser/notifications/desktop_notification_service.h | 4 +--- chrome/browser/renderer_host/render_view_host.cc | 11 +---------- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/chrome/browser/notifications/desktop_notification_service.cc b/chrome/browser/notifications/desktop_notification_service.cc index f0eb62d..53cc37b 100644 --- a/chrome/browser/notifications/desktop_notification_service.cc +++ b/chrome/browser/notifications/desktop_notification_service.cc @@ -8,6 +8,7 @@ #include "app/resource_bundle.h" #include "base/thread.h" #include "base/utf_string_conversions.h" +#include "chrome/browser/browser_list.h" #include "chrome/browser/child_process_host.h" #include "chrome/browser/chrome_thread.h" #include "chrome/browser/extensions/extensions_service.h" @@ -375,12 +376,18 @@ void DesktopNotificationService::PersistPermissionChange( } void DesktopNotificationService::RequestPermission( - const GURL& origin, int process_id, int route_id, int callback_context, - TabContents* tab) { + const GURL& origin, int process_id, int route_id, int callback_context) { DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); + // Show an info bar requesting permission. + Browser* browser = BrowserList::GetLastActive(); + if (!browser) { + // Reached during ui tests. + return; + } + TabContents* tab = browser->GetSelectedTabContents(); if (!tab) return; - // Show an info bar requesting permission. + std::wstring display_name = DisplayNameForOrigin(origin); tab->AddInfoBar(new NotificationPermissionInfoBarDelegate( diff --git a/chrome/browser/notifications/desktop_notification_service.h b/chrome/browser/notifications/desktop_notification_service.h index 4a651f8..c3a41f9 100644 --- a/chrome/browser/notifications/desktop_notification_service.h +++ b/chrome/browser/notifications/desktop_notification_service.h @@ -19,7 +19,6 @@ class NotificationsPrefsCache; class PrefService; class Profile; class Task; -class TabContents; // The DesktopNotificationService is an object, owned by the Profile, // which provides the creation of desktop "toasts" to web pages and workers. @@ -40,8 +39,7 @@ class DesktopNotificationService : public NotificationObserver { void RequestPermission(const GURL& origin, int process_id, int route_id, - int callback_context, - TabContents* tab); + int callback_context); // Takes a notification object and shows it in the UI. void ShowNotification(const Notification& notification); diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc index 0981527..7d5a58a 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -15,7 +15,6 @@ #include "base/string_util.h" #include "base/time.h" #include "base/waitable_event.h" -#include "chrome/browser/browser_list.h" #include "chrome/browser/child_process_security_policy.h" #include "chrome/browser/cross_site_request_manager.h" #include "chrome/browser/debugger/devtools_manager.h" @@ -1755,16 +1754,8 @@ void RenderViewHost::OnRequestNotificationPermission( const GURL& source_origin, int callback_context) { DesktopNotificationService* service = process()->profile()->GetDesktopNotificationService(); - - Browser* browser = BrowserList::GetLastActive(); - // We may not have a BrowserList if the chrome browser process is launched as - // a ChromeFrame process in which case we attempt to use the TabContents - // provided by the RenderViewHostDelegate. - TabContents* tab = browser ? browser->GetSelectedTabContents() : - delegate_->GetAsTabContents(); - service->RequestPermission( - source_origin, process()->id(), routing_id(), callback_context, tab); + source_origin, process()->id(), routing_id(), callback_context); } void RenderViewHost::OnExtensionRequest(const std::string& name, -- cgit v1.1