Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9239)

Unified Diff: chrome_frame/chrome_active_document.cc

Issue 3053008: Second attempt at trying to land buggy bho avoidance: http://codereview.chrom... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome_frame/buggy_bho_handling.cc ('k') | chrome_frame/chrome_frame.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_frame/chrome_active_document.cc
===================================================================
--- chrome_frame/chrome_active_document.cc (revision 53233)
+++ chrome_frame/chrome_active_document.cc (working copy)
@@ -18,7 +18,6 @@
#include "base/command_line.h"
#include "base/file_util.h"
-#include "base/file_version_info.h"
#include "base/logging.h"
#include "base/path_service.h"
#include "base/process_util.h"
@@ -39,6 +38,7 @@
#include "chrome/test/automation/tab_proxy.h"
#include "chrome_frame/bho.h"
#include "chrome_frame/bind_context_info.h"
+#include "chrome_frame/buggy_bho_handling.h"
#include "chrome_frame/crash_reporting/crash_metrics.h"
#include "chrome_frame/utils.h"
@@ -50,7 +50,6 @@
DEFINE_GUID(CGID_DocHostCmdPriv, 0x000214D4L, 0, 0, 0xC0, 0, 0, 0, 0, 0, 0,
0x46);
-
base::ThreadLocalPointer<ChromeActiveDocument> g_active_doc_cache;
bool g_first_launch_by_process_ = true;
@@ -724,6 +723,15 @@
ScopedComPtr<IDocObjectService> doc_object_svc;
ScopedComPtr<IWebBrowserEventsService> web_browser_events_svc;
+ buggy_bho::BuggyBhoTls bad_bho_tls;
+ if (GetConfigBool(true, kEnableBuggyBhoIntercept)) {
+ ScopedComPtr<IWebBrowser2> wb2;
+ DoQueryService(SID_SWebBrowserApp, m_spClientSite, wb2.Receive());
+ if (wb2) {
+ buggy_bho::BuggyBhoTls::PatchBuggyBHOs(wb2);
+ }
+ }
+
DoQueryService(__uuidof(web_browser_events_svc), m_spClientSite,
web_browser_events_svc.Receive());
@@ -764,12 +772,10 @@
// Now call the FireNavigateCompleteEvent which makes IE update the text
// in the address-bar.
doc_object_svc->FireNavigateComplete2(this, 0);
- if (ShouldFireDocumentComplete())
- doc_object_svc->FireDocumentComplete(this, 0);
+ doc_object_svc->FireDocumentComplete(this, 0);
} else if (web_browser_events_svc) {
web_browser_events_svc->FireNavigateComplete2Event();
- if (ShouldFireDocumentComplete())
- web_browser_events_svc->FireDocumentCompleteEvent();
+ web_browser_events_svc->FireDocumentCompleteEvent();
}
}
@@ -1278,63 +1284,3 @@
GiveFocusToChrome(false);
return 0;
}
-
-namespace {
-struct ModuleAndVersion {
- const char* module_name_;
- const uint32 major_version_;
- const uint32 minor_version_;
-};
-} // end namespace
-
-// static
-bool ChromeActiveDocument::ShouldFireDocumentComplete() {
- typedef enum ModuleCheckResult {
- CHECK_NOT_DONE,
- DOCUMENT_COMPLETE_OK,
- DOCUMENT_COMPLETE_NOT_OK
- };
-
- static ModuleCheckResult results = CHECK_NOT_DONE;
-
- if (results == CHECK_NOT_DONE) {
- // These modules are missing some checks in their DocumentComplete
- // implementation that causes a crash.
- static const ModuleAndVersion buggy_modules[] = {
- { "askbar.dll", 4, 1 }, // biggest troublemaker: 4.1.0.5.
- { "gbieh.dll", 3, 8 }, // biggest troublemaker: 3.8.14.12
- { "gbiehcef.dll", 3, 8 }, // biggest troublemaker: 3.8.11.23
- { "gbiehUni.dll", 3, 8 }, // Another Banco DLL.
- };
-
- for (size_t i = 0; results == CHECK_NOT_DONE &&
- i < arraysize(buggy_modules); ++i) {
- const ModuleAndVersion& module = buggy_modules[i];
- HMODULE mod = ::GetModuleHandleA(module.module_name_);
- if (mod) {
- wchar_t path[MAX_PATH * 2] = {0};
- ::GetModuleFileNameW(mod, path, arraysize(path));
- scoped_ptr<FileVersionInfo> version_info(
- FileVersionInfo::CreateFileVersionInfo(FilePath(path)));
- DCHECK(version_info.get());
- if (version_info.get()) {
- uint32 major = 0, minor = 0;
- if (!ParseVersion(version_info->file_version(), &major, &minor))
- ParseVersion(version_info->product_version(), &major, &minor);
- if (major < module.major_version_ ||
- (major == module.major_version_ &&
- minor <= module.minor_version_)) {
- DLOG(WARNING) << "Buggy module found: " << module.module_name_;
- results = DOCUMENT_COMPLETE_NOT_OK;
- }
- }
- }
- }
-
- if (results == CHECK_NOT_DONE)
- results = DOCUMENT_COMPLETE_OK;
- }
-
- return results == DOCUMENT_COMPLETE_OK;
-}
-
« no previous file with comments | « chrome_frame/buggy_bho_handling.cc ('k') | chrome_frame/chrome_frame.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698