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

Unified Diff: chrome/browser/ui/browser.cc

Issue 7745027: Dispatch the following IPC messages in TabContents and handle them via the TabContentsDelegate (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 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
« no previous file with comments | « chrome/browser/ui/browser.h ('k') | chrome/browser/ui/tab_contents/tab_contents_wrapper.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/browser.cc
===================================================================
--- chrome/browser/ui/browser.cc (revision 98271)
+++ chrome/browser/ui/browser.cc (working copy)
@@ -31,6 +31,8 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_shutdown.h"
#include "chrome/browser/character_encoding.h"
+#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
+#include "chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.h"
#include "chrome/browser/debugger/devtools_toggle_action.h"
#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/download/chrome_download_manager_delegate.h"
@@ -51,6 +53,7 @@
#include "chrome/browser/google/google_util.h"
#include "chrome/browser/instant/instant_controller.h"
#include "chrome/browser/instant/instant_unload_handler.h"
+#include "chrome/browser/intents/register_intent_handler_infobar_delegate.h"
#include "chrome/browser/net/browser_url_util.h"
#include "chrome/browser/net/url_fixer_upper.h"
#include "chrome/browser/notifications/notification_ui_manager.h"
@@ -104,6 +107,7 @@
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/custom_handlers/protocol_handler.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/pref_names.h"
@@ -2412,6 +2416,96 @@
path);
}
+// static
+void Browser::JSOutOfMemoryHelper(TabContents* tab) {
+ TabContentsWrapper* tcw = TabContentsWrapper::GetCurrentWrapperForContents(
+ tab);
+ if (tcw) {
+ tcw->AddInfoBar(new SimpleAlertInfoBarDelegate(
+ tab, NULL, l10n_util::GetStringUTF16(IDS_JS_OUT_OF_MEMORY_PROMPT),
+ true));
+ }
+}
+
+// static
+void Browser::RegisterProtocolHandlerHelper(TabContents* tab,
+ const std::string& protocol,
+ const GURL& url,
+ const string16& title) {
+ TabContentsWrapper* tcw = TabContentsWrapper::GetCurrentWrapperForContents(
+ tab);
+ if (!tcw || tcw->profile()->IsOffTheRecord())
+ return;
+
+ ChildProcessSecurityPolicy* policy =
+ ChildProcessSecurityPolicy::GetInstance();
+ if (policy->IsPseudoScheme(protocol) || policy->IsDisabledScheme(protocol))
+ return;
+
+ ProtocolHandler handler =
+ ProtocolHandler::CreateProtocolHandler(protocol, url, title);
+
+ ProtocolHandlerRegistry* registry =
+ tcw->profile()->GetProtocolHandlerRegistry();
+ if (!registry->enabled() || registry->IsRegistered(handler) ||
+ registry->IsIgnored(handler))
+ return;
+
+ if (!handler.IsEmpty() &&
+ registry->CanSchemeBeOverridden(handler.protocol())) {
+ UserMetrics::RecordAction(
+ UserMetricsAction("RegisterProtocolHandler.InfoBar_Shown"));
+ tcw->AddInfoBar(new RegisterProtocolHandlerInfoBarDelegate(tab,
+ registry,
+ handler));
+ }
+}
+
+// static
+void Browser::RegisterIntentHandlerHelper(TabContents* tab,
+ const string16& action,
+ const string16& type,
+ const string16& href,
+ const string16& title) {
+ TabContentsWrapper* tcw = TabContentsWrapper::GetCurrentWrapperForContents(
+ tab);
+ if (!tcw || tcw->profile()->IsOffTheRecord())
+ return;
+
+ if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableWebIntents))
+ return;
+
+ GURL service_url(href);
+ if (!service_url.is_valid()) {
+ const GURL& url = tab->GetURL();
+ service_url = url.Resolve(href);
+ }
+
+ WebIntentData intent;
+ intent.service_url = service_url;
+ intent.action = action;
+ intent.type = type;
+ intent.title = title;
+ tcw->AddInfoBar(new RegisterIntentHandlerInfoBarDelegate(tab, intent));
+}
+
+// static
+void Browser::WebIntentDispatchHelper(TabContents* tab,
+ int routing_id,
+ const string16& action,
+ const string16& type,
+ const string16& data,
+ int intent_id) {
+ if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableWebIntents))
+ return;
+
+ DLOG(INFO) << "Browser tab contents received intent:"
+ << "\naction=" << UTF16ToASCII(action)
+ << "\ntype=" << UTF16ToASCII(type)
+ << "\nrenderer_id=" << routing_id
+ << "\nid=" << intent_id;
+}
+
void Browser::ExecuteCommandWithDisposition(
int id, WindowOpenDisposition disposition) {
// No commands are enabled if there is not yet any selected tab.
@@ -3637,6 +3731,35 @@
ToggleFullscreenMode();
}
+void Browser::JSOutOfMemory(TabContents* tab) {
+ Browser::JSOutOfMemoryHelper(tab);
+}
+
+void Browser::RegisterProtocolHandler(TabContents* tab,
+ const std::string& protocol,
+ const GURL& url,
+ const string16& title) {
+ Browser::RegisterProtocolHandlerHelper(tab, protocol, url, title);
+}
+
+void Browser::RegisterIntentHandler(TabContents* tab,
+ const string16& action,
+ const string16& type,
+ const string16& href,
+ const string16& title) {
+ Browser::RegisterIntentHandlerHelper(tab, action, type, href, title);
+}
+
+void Browser::WebIntentDispatch(TabContents* tab,
+ int routing_id,
+ const string16& action,
+ const string16& type,
+ const string16& data,
+ int intent_id) {
+ Browser::WebIntentDispatchHelper(tab, routing_id, action, type, data,
+ intent_id);
+}
+
void Browser::ExitTabbedFullscreenModeIfNecessary() {
if (tab_caused_fullscreen_)
ToggleFullscreenMode();
« no previous file with comments | « chrome/browser/ui/browser.h ('k') | chrome/browser/ui/tab_contents/tab_contents_wrapper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698