summaryrefslogtreecommitdiffstats
path: root/chrome/browser/external_protocol_handler.cc
diff options
context:
space:
mode:
authoravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-06 19:33:07 +0000
committeravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-06 19:33:07 +0000
commit98299483b0b891bc245c946b5bf2608e5904db25 (patch)
treedd5368ae5e49127d21eb3db2210a8610d8b3b441 /chrome/browser/external_protocol_handler.cc
parent3d9d4558ac5f0e5f34269f37c5e5536bf221eb87 (diff)
downloadchromium_src-98299483b0b891bc245c946b5bf2608e5904db25.zip
chromium_src-98299483b0b891bc245c946b5bf2608e5904db25.tar.gz
chromium_src-98299483b0b891bc245c946b5bf2608e5904db25.tar.bz2
External protocol dialog support for the Mac.
BUG=http://crbug.com/15546 TEST=try to use an external protocol; it should put up a dialog Review URL: http://codereview.chromium.org/256065 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28145 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/external_protocol_handler.cc')
-rw-r--r--chrome/browser/external_protocol_handler.cc27
1 files changed, 23 insertions, 4 deletions
diff --git a/chrome/browser/external_protocol_handler.cc b/chrome/browser/external_protocol_handler.cc
index b16c081..7a960c9 100644
--- a/chrome/browser/external_protocol_handler.cc
+++ b/chrome/browser/external_protocol_handler.cc
@@ -90,7 +90,7 @@ ExternalProtocolHandler::BlockState ExternalProtocolHandler::GetBlockState(
}
// Check the stored prefs.
- // TODO(pkasting): http://b/119651 This kind of thing should go in the
+ // TODO(pkasting): http://b/1119651 This kind of thing should go in the
// preferences on the profile, not in the local state.
PrefService* pref = g_browser_process->local_state();
if (pref) { // May be NULL during testing.
@@ -110,6 +110,25 @@ ExternalProtocolHandler::BlockState ExternalProtocolHandler::GetBlockState(
}
// static
+void ExternalProtocolHandler::SetBlockState(const std::wstring& scheme,
+ BlockState state) {
+ // Set in the stored prefs.
+ // TODO(pkasting): http://b/1119651 This kind of thing should go in the
+ // preferences on the profile, not in the local state.
+ PrefService* pref = g_browser_process->local_state();
+ if (pref) { // May be NULL during testing.
+ DictionaryValue* win_pref =
+ pref->GetMutableDictionary(prefs::kExcludedSchemes);
+ CHECK(win_pref);
+
+ if (state == UNKNOWN)
+ win_pref->Remove(scheme, NULL);
+ else
+ win_pref->SetBoolean(scheme, state == BLOCK ? true : false);
+ }
+}
+
+// static
void ExternalProtocolHandler::LaunchUrl(const GURL& url,
int render_process_host_id,
int tab_contents_id) {
@@ -124,7 +143,7 @@ void ExternalProtocolHandler::LaunchUrl(const GURL& url,
return;
if (block_state == UNKNOWN) {
-#if defined(OS_WIN) || defined(TOOLKIT_GTK)
+#if defined(OS_WIN) || defined(TOOLKIT_GTK) || defined(OS_MACOSX)
g_accept_requests = false;
// Ask the user if they want to allow the protocol. This will call
// LaunchUrlWithoutSecurityCheck if the user decides to accept the protocol.
@@ -132,8 +151,8 @@ void ExternalProtocolHandler::LaunchUrl(const GURL& url,
render_process_host_id,
tab_contents_id);
#endif
- // For now, allow only whitelisted protocols to fire on Mac and Linux/Views.
- // See http://crbug.com/15546.
+ // For now, allow only whitelisted protocols to fire on Linux/Views.
+ // See http://crbug.com/23853 .
return;
}