diff options
author | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-06 19:33:07 +0000 |
---|---|---|
committer | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-06 19:33:07 +0000 |
commit | 98299483b0b891bc245c946b5bf2608e5904db25 (patch) | |
tree | dd5368ae5e49127d21eb3db2210a8610d8b3b441 /chrome/browser/external_protocol_handler.cc | |
parent | 3d9d4558ac5f0e5f34269f37c5e5536bf221eb87 (diff) | |
download | chromium_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.cc | 27 |
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; } |