| Index: chrome_frame/chrome_active_document.cc
|
| ===================================================================
|
| --- chrome_frame/chrome_active_document.cc (revision 53172)
|
| +++ 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();
|
| }
|
| }
|
|
|
| @@ -1264,62 +1270,3 @@
|
| 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;
|
| -}
|
| -
|
|
|