From ec18ca6778afde54d02f109b86694eabf8e3d6a5 Mon Sep 17 00:00:00 2001 From: "tommi@chromium.org" Date: Thu, 2 Sep 2010 13:39:50 +0000 Subject: Pin the DLL if we make any patches instead of doing it from the Bho that does not apply the patches itself. TEST=There should be no changes but we were seeing some potential problems in house with other proprietary browser extensions. BUG=none Review URL: http://codereview.chromium.org/3359001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@58350 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome_frame/utils.cc | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'chrome_frame/utils.cc') diff --git a/chrome_frame/utils.cc b/chrome_frame/utils.cc index c2c2d48..e8dfb4b 100644 --- a/chrome_frame/utils.cc +++ b/chrome_frame/utils.cc @@ -942,7 +942,9 @@ bool IsHeadlessMode() { } bool IsUnpinnedMode() { - bool unpinned = GetConfigBool(false, kChromeFrameUnpinnedMode); + // We only check this value once and then cache it since changing the registry + // once we've pinned the DLL won't have any effect. + static bool unpinned = GetConfigBool(false, kChromeFrameUnpinnedMode); return unpinned; } @@ -1390,3 +1392,22 @@ bool CanNavigate(const GURL& url, IInternetSecurityManager* security_manager, return true; } +void PinModule() { + static bool s_pinned = false; + if (!s_pinned && !IsUnpinnedMode()) { + FilePath module_path; + if (PathService::Get(base::FILE_MODULE, &module_path)) { + HMODULE unused; + if (!GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_PIN, + module_path.value().c_str(), &unused)) { + NOTREACHED() << "Failed to pin module " << module_path.value().c_str() + << " , last error: " << GetLastError(); + } else { + s_pinned = true; + } + } else { + NOTREACHED() << "Could not get module path."; + } + } +} + -- cgit v1.1