summaryrefslogtreecommitdiffstats
path: root/chrome_frame/urlmon_moniker.cc
diff options
context:
space:
mode:
authorananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-09 23:53:26 +0000
committerananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-09 23:53:26 +0000
commitffec6bf36fb4527d051960d4871623a5b91ec122 (patch)
treeebe555761e809e0733955482b3f8581f74e4b171 /chrome_frame/urlmon_moniker.cc
parent443f856cef514cbfd1a17d486f66c3d3530946c5 (diff)
downloadchromium_src-ffec6bf36fb4527d051960d4871623a5b91ec122.zip
chromium_src-ffec6bf36fb4527d051960d4871623a5b91ec122.tar.gz
chromium_src-ffec6bf36fb4527d051960d4871623a5b91ec122.tar.bz2
Fix IE6 switching issues
Fixes for issues with new moniker patch. BUG=none TEST=covered by existing tests Review URL: http://codereview.chromium.org/1625010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@44160 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/urlmon_moniker.cc')
-rw-r--r--chrome_frame/urlmon_moniker.cc40
1 files changed, 32 insertions, 8 deletions
diff --git a/chrome_frame/urlmon_moniker.cc b/chrome_frame/urlmon_moniker.cc
index fc66e9f..e3993d4 100644
--- a/chrome_frame/urlmon_moniker.cc
+++ b/chrome_frame/urlmon_moniker.cc
@@ -208,17 +208,43 @@ void MonikerPatch::Uninitialize() {
vtable_patch::UnpatchInterfaceMethods(IMoniker_PatchInfo);
}
-bool ShouldWrapCallback(IMoniker* moniker, IBindCtx* bind_context) {
+bool ShouldWrapCallback(IMoniker* moniker, REFIID iid, IBindCtx* bind_context) {
+ CComHeapPtr<WCHAR> url;
+ HRESULT hr = moniker->GetDisplayName(bind_context, NULL, &url);
+ if (!url) {
+ DLOG(INFO) << __FUNCTION__ << StringPrintf(
+ "GetDisplayName failed. Error: 0x%x", hr);
+ return false;
+ }
+
+ if (!IsEqualIID(IID_IStream, iid)) {
+ DLOG(INFO) << __FUNCTION__ << "Url: " << url <<
+ "Not wrapping: IID is not IStream.";
+ return false;
+ }
+
+ ScopedComPtr<IUnknown> our_request;
+ hr = bind_context->GetObjectParam(L"_CHROMEFRAME_REQUEST_",
+ our_request.Receive());
+ if (our_request) {
+ DLOG(INFO) << __FUNCTION__ << "Url: " << url <<
+ "Not wrapping: request from chrome frame.";
+ return false;
+ }
+
NavigationManager* mgr = NavigationManager::GetThreadInstance();
if (!mgr) {
- DLOG(INFO) << __FUNCTION__ << "No navitation manager to wrap";
+ DLOG(INFO) << __FUNCTION__ << "Url: " << url <<
+ "No navitagion manager to wrap";
return false;
}
- CComHeapPtr<WCHAR> url;
- HRESULT hr = moniker->GetDisplayName(bind_context, NULL, &url);
- DCHECK(SUCCEEDED(hr));
bool should_wrap = mgr->IsTopLevelUrl(url);
+ if (!should_wrap) {
+ DLOG(INFO) << __FUNCTION__ << "Url: " << url <<
+ "Not wrapping: Not top level url.";
+ }
+
return should_wrap;
}
@@ -255,12 +281,11 @@ HRESULT MonikerPatch::BindToObject(IMoniker_BindToObject_Fn original,
HRESULT MonikerPatch::BindToStorage(IMoniker_BindToStorage_Fn original,
IMoniker* me, IBindCtx* bind_ctx,
IMoniker* to_left, REFIID iid, void** obj) {
- DLOG(INFO) << __FUNCTION__;
DCHECK(to_left == NULL);
HRESULT hr = S_OK;
CComObject<BSCBStorageBind>* callback = NULL;
- if ((IsEqualIID(IID_IStream, iid)) && ShouldWrapCallback(me, bind_ctx)) {
+ if (ShouldWrapCallback(me, iid, bind_ctx)) {
hr = CComObject<BSCBStorageBind>::CreateInstance(&callback);
callback->AddRef();
hr = callback->Initialize(me, bind_ctx);
@@ -274,6 +299,5 @@ HRESULT MonikerPatch::BindToStorage(IMoniker_BindToStorage_Fn original,
// and then it's too late.
if ((S_OK == hr) && callback)
callback->MayPlayBack(BSCF_LASTDATANOTIFICATION);
-
return hr;
} \ No newline at end of file