diff options
author | amit@chromium.org <amit@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-03 17:24:29 +0000 |
---|---|---|
committer | amit@chromium.org <amit@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-03 17:24:29 +0000 |
commit | 552fb601aa696cc69de9fbf69f17438ac1f6f3a9 (patch) | |
tree | 1b800a99dff7facce52bb5423a056a6e1ff4356a /chrome_frame/chrome_tab.cc | |
parent | 9a30588cd1081b702ade98be4eb4a7c1344bb43e (diff) | |
download | chromium_src-552fb601aa696cc69de9fbf69f17438ac1f6f3a9.zip chromium_src-552fb601aa696cc69de9fbf69f17438ac1f6f3a9.tar.gz chromium_src-552fb601aa696cc69de9fbf69f17438ac1f6f3a9.tar.bz2 |
Remove cf: protocol
Well, almost. cf: is now changed to gcf: protocol. gcf: protocol
now is supported only for the following cases:
1. gcf:attach_external_tabXXX urls. These are URLs used internally
by Chrome Frame to implement window.open
2. gcf:about:xxx
3. gcf:view-source:xxx
4 For any other URLs ONLY if it is enabled by setting a registry
value 'EnableGCFProtocol' to 1 in HKCU\Software\Google\ChromeFrame
BUG=22721,23006,23175,29350
TEST=changed existing cf: tests to new gcf: tests, added a new test for cf:view-source
Review URL: http://codereview.chromium.org/562008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@37981 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/chrome_tab.cc')
-rw-r--r-- | chrome_frame/chrome_tab.cc | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/chrome_frame/chrome_tab.cc b/chrome_frame/chrome_tab.cc index 9944f5b..301d9f8 100644 --- a/chrome_frame/chrome_tab.cc +++ b/chrome_frame/chrome_tab.cc @@ -40,6 +40,9 @@ static const wchar_t kBhoRegistryPath[] = const wchar_t kInternetSettings[] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"; +const wchar_t kProtocolHandlers[] = + L"Software\\Classes\\Protocols\\Handler"; + const wchar_t kBhoNoLoadExplorerValue[] = L"NoExplorer"; // {0562BFC3-2550-45b4-BD8E-A310583D3A6F} @@ -236,7 +239,6 @@ HRESULT RegisterChromeTabBHO() { DLOG(INFO) << "Registered ChromeTab BHO"; // We now add the chromeframe user agent at runtime. - // SetClockUserAgent(L"1"); RefreshElevationPolicy(); return S_OK; } @@ -270,6 +272,26 @@ HRESULT UnregisterChromeTabBHO() { return S_OK; } +HRESULT CleanupCFProtocol() { + RegKey protocol_handlers_key; + if (protocol_handlers_key.Open(HKEY_LOCAL_MACHINE, kProtocolHandlers, + KEY_READ | KEY_WRITE)) { + RegKey cf_protocol_key; + if (cf_protocol_key.Open(protocol_handlers_key.Handle(), L"cf", + KEY_QUERY_VALUE)) { + std::wstring protocol_clsid_string; + if (cf_protocol_key.ReadValue(L"CLSID", &protocol_clsid_string)) { + CLSID protocol_clsid = {0}; + IIDFromString(protocol_clsid_string.c_str(), &protocol_clsid); + if (IsEqualGUID(protocol_clsid, CLSID_ChromeProtocol)) + protocol_handlers_key.DeleteKey(L"cf"); + } + } + } + + return S_OK; +} + // Used to determine whether the DLL can be unloaded by OLE STDAPI DllCanUnloadNow() { return _AtlModule.DllCanUnloadNow(); @@ -323,6 +345,8 @@ STDAPI DllUnregisterServer() { hr = _AtlModule.UpdateRegistryFromResourceS(IDR_CHROMEFRAME_NPAPI, FALSE); } + // TODO(joshia): Remove after 2 refresh releases + CleanupCFProtocol(); return hr; } |