Implementation of single-module-per-logon-session-per-profile implementation for Chrome Frame.
BUG=61383
TEST=Run IE with version X of CF loaded. Register version Y of CF. Run a second IE process, notice that version Y when loaded defers to version X.
Review URL: http://codereview.chromium.org/4144008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65236 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome_frame/chrome_tab.cc b/chrome_frame/chrome_tab.cc
index b81be69..c31e8ece 100644
--- a/chrome_frame/chrome_tab.cc
+++ b/chrome_frame/chrome_tab.cc
@@ -212,26 +212,25 @@
logging::InitLogging(NULL, logging::LOG_ONLY_TO_SYSTEM_DEBUG_LOG,
logging::LOCK_LOG_FILE, logging::DELETE_OLD_LOG_FILE);
- if (!DllRedirector::RegisterAsFirstCFModule()) {
- // We are not the first ones in, get the module who registered first.
- HMODULE original_module = DllRedirector::GetFirstCFModule();
- DCHECK(original_module != NULL)
- << "Could not get first CF module handle.";
- HMODULE this_module = reinterpret_cast<HMODULE>(&__ImageBase);
- if (original_module != this_module) {
- // Someone else was here first, try and get a pointer to their
- // DllGetClassObject export:
- g_dll_get_class_object_redir_ptr =
- DllRedirector::GetDllGetClassObjectPtr(original_module);
- DCHECK(g_dll_get_class_object_redir_ptr != NULL)
- << "Found CF module with no DllGetClassObject export.";
- }
+ DllRedirector* dll_redirector = Singleton<DllRedirector>::get();
+ DCHECK(dll_redirector);
+
+ if (!dll_redirector->RegisterAsFirstCFModule()) {
+ // Someone else was here first, try and get a pointer to their
+ // DllGetClassObject export:
+ g_dll_get_class_object_redir_ptr =
+ dll_redirector->GetDllGetClassObjectPtr();
+ DCHECK(g_dll_get_class_object_redir_ptr != NULL)
+ << "Found CF module with no DllGetClassObject export.";
}
// Enable ETW logging.
logging::LogEventProvider::Initialize(kChromeFrameProvider);
} else if (reason == DLL_PROCESS_DETACH) {
- DllRedirector::UnregisterAsFirstCFModule();
+ DllRedirector* dll_redirector = Singleton<DllRedirector>::get();
+ DCHECK(dll_redirector);
+
+ dll_redirector->UnregisterAsFirstCFModule();
g_patch_helper.UnpatchIfNeeded();
delete g_exit_manager;
g_exit_manager = NULL;