Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(766)

Unified Diff: chrome/browser/chrome_content_browser_client.cc

Issue 7125006: Get rid of Chrome notifications dependency, and instead go through ContentBrowserClient to show U... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix browsertest Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chrome_content_browser_client.cc
===================================================================
--- chrome/browser/chrome_content_browser_client.cc (revision 88079)
+++ chrome/browser/chrome_content_browser_client.cc (working copy)
@@ -14,10 +14,12 @@
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/content_settings/tab_specific_content_settings.h"
#include "chrome/browser/debugger/devtools_handler.h"
-#include "chrome/browser/desktop_notification_handler.h"
+#include "chrome/browser/extensions/extension_info_map.h"
#include "chrome/browser/extensions/extension_message_handler.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/google/google_util.h"
+#include "chrome/browser/notifications/desktop_notification_service.h"
+#include "chrome/browser/notifications/desktop_notification_service_factory.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/printing/printing_message_filter.h"
@@ -36,6 +38,7 @@
#include "chrome/browser/ui/webui/chrome_web_ui_factory.h"
#include "chrome/common/child_process_logging.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_messages.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/render_messages.h"
@@ -51,6 +54,7 @@
#include "content/browser/tab_contents/tab_contents.h"
#include "content/browser/worker_host/worker_process_host.h"
#include "content/common/bindings_policy.h"
+#include "content/common/desktop_notification_messages.h"
#include "net/base/cookie_monster.h"
#include "net/base/cookie_options.h"
@@ -124,7 +128,6 @@
void ChromeContentBrowserClient::RenderViewHostCreated(
RenderViewHost* render_view_host) {
new ChromeRenderViewHostObserver(render_view_host);
- DesktopNotificationHandler::Create(render_view_host);
new DevToolsHandler(render_view_host);
new ExtensionMessageHandler(render_view_host);
@@ -363,6 +366,87 @@
new SSLAddCertHandler(request, cert, render_process_id, render_view_id);
}
+void ChromeContentBrowserClient::RequestDesktopNotificationPermission(
+ const GURL& source_origin,
+ int callback_context,
+ int render_process_id,
+ int render_view_id) {
+ RenderViewHost* rvh = RenderViewHost::FromID(
+ render_process_id, render_view_id);
+ if (!rvh) {
+ NOTREACHED();
+ return;
+ }
+
+ RenderProcessHost* process = rvh->process();
+ DesktopNotificationService* service =
+ DesktopNotificationServiceFactory::GetForProfile(process->profile());
+ service->RequestPermission(
+ source_origin, render_process_id, render_view_id, callback_context,
+ tab_util::GetTabContentsByID(render_process_id, render_view_id));
+}
+
+WebKit::WebNotificationPresenter::Permission
+ ChromeContentBrowserClient::CheckDesktopNotificationPermission(
+ const GURL& source_url,
+ const content::ResourceContext& context) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ ProfileIOData* io_data =
+ reinterpret_cast<ProfileIOData*>(context.GetUserData(NULL));
+
+ const Extension* extension =
+ io_data->GetExtensionInfoMap()->extensions().GetByURL(source_url);
+ if (extension &&
+ extension->HasApiPermission(Extension::kNotificationPermission)) {
+ return WebKit::WebNotificationPresenter::PermissionAllowed;
+ }
+
+ // Fall back to the regular notification preferences, which works on an
+ // origin basis.
+ return io_data->GetNotificationService() ?
+ io_data->GetNotificationService()->HasPermission(source_url.GetOrigin()) :
+ WebKit::WebNotificationPresenter::PermissionNotAllowed;
+}
+
+void ChromeContentBrowserClient::ShowDesktopNotification(
+ const DesktopNotificationHostMsg_Show_Params& params,
+ int render_process_id,
+ int render_view_id,
+ bool worker) {
+ RenderViewHost* rvh = RenderViewHost::FromID(
+ render_process_id, render_view_id);
+ if (!rvh) {
+ NOTREACHED();
+ return;
+ }
+
+ RenderProcessHost* process = rvh->process();
+ DesktopNotificationService* service =
+ DesktopNotificationServiceFactory::GetForProfile(process->profile());
+ service->ShowDesktopNotification(
+ params, render_process_id, render_view_id,
+ worker ? DesktopNotificationService::WorkerNotification :
+ DesktopNotificationService::PageNotification);
+}
+
+void ChromeContentBrowserClient::CancelDesktopNotification(
+ int render_process_id,
+ int render_view_id,
+ int notification_id) {
+ RenderViewHost* rvh = RenderViewHost::FromID(
+ render_process_id, render_view_id);
+ if (!rvh) {
+ NOTREACHED();
+ return;
+ }
+
+ RenderProcessHost* process = rvh->process();
+ DesktopNotificationService* service =
+ DesktopNotificationServiceFactory::GetForProfile(process->profile());
+ service->CancelDesktopNotification(
+ render_process_id, render_view_id, notification_id);
+}
+
#if defined(OS_LINUX)
int ChromeContentBrowserClient::GetCrashSignalFD(
const std::string& process_type) {

Powered by Google App Engine
This is Rietveld 408576698