summaryrefslogtreecommitdiffstats
path: root/chrome/browser/notifications
diff options
context:
space:
mode:
authorananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-27 01:33:04 +0000
committerananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-27 01:33:04 +0000
commit75d0c462ff9a10e430e23f90936a97e8efa7e77c (patch)
tree78f1ed918044a70c3d03eb5166fdf60c76fb50a4 /chrome/browser/notifications
parent4f32c150be688665f09abd5b0af4090cfacfb7ed (diff)
downloadchromium_src-75d0c462ff9a10e430e23f90936a97e8efa7e77c.zip
chromium_src-75d0c462ff9a10e430e23f90936a97e8efa7e77c.tar.gz
chromium_src-75d0c462ff9a10e430e23f90936a97e8efa7e77c.tar.bz2
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 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48348 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/notifications')
-rw-r--r--chrome/browser/notifications/desktop_notification_service.cc13
-rw-r--r--chrome/browser/notifications/desktop_notification_service.h4
2 files changed, 6 insertions, 11 deletions
diff --git a/chrome/browser/notifications/desktop_notification_service.cc b/chrome/browser/notifications/desktop_notification_service.cc
index 53cc37b..f0eb62d 100644
--- a/chrome/browser/notifications/desktop_notification_service.cc
+++ b/chrome/browser/notifications/desktop_notification_service.cc
@@ -8,7 +8,6 @@
#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"
@@ -376,18 +375,12 @@ void DesktopNotificationService::PersistPermissionChange(
}
void DesktopNotificationService::RequestPermission(
- const GURL& origin, int process_id, int route_id, int callback_context) {
+ const GURL& origin, int process_id, int route_id, int callback_context,
+ TabContents* tab) {
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 c3a41f9..4a651f8 100644
--- a/chrome/browser/notifications/desktop_notification_service.h
+++ b/chrome/browser/notifications/desktop_notification_service.h
@@ -19,6 +19,7 @@ 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.
@@ -39,7 +40,8 @@ class DesktopNotificationService : public NotificationObserver {
void RequestPermission(const GURL& origin,
int process_id,
int route_id,
- int callback_context);
+ int callback_context,
+ TabContents* tab);
// Takes a notification object and shows it in the UI.
void ShowNotification(const Notification& notification);