summaryrefslogtreecommitdiffstats
path: root/chrome_frame/chrome_tab.cc
diff options
context:
space:
mode:
authoramit@chromium.org <amit@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-03 17:24:29 +0000
committeramit@chromium.org <amit@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-03 17:24:29 +0000
commit552fb601aa696cc69de9fbf69f17438ac1f6f3a9 (patch)
tree1b800a99dff7facce52bb5423a056a6e1ff4356a /chrome_frame/chrome_tab.cc
parent9a30588cd1081b702ade98be4eb4a7c1344bb43e (diff)
downloadchromium_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.cc26
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;
}