diff options
Diffstat (limited to 'chrome_frame/utils.cc')
-rw-r--r-- | chrome_frame/utils.cc | 23 |
1 files changed, 22 insertions, 1 deletions
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."; + } + } +} + |