summaryrefslogtreecommitdiffstats
path: root/chrome_frame
diff options
context:
space:
mode:
authorananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-04 21:58:06 +0000
committerananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-04 21:58:06 +0000
commitae33d67ef68f2ddcfa0b4b10e491e98d90fb0cf1 (patch)
tree711640f620bd64e8f5c378b46c57ba33fa35b53a /chrome_frame
parent728a67635f3e69b412c258b47091033c5573a49c (diff)
downloadchromium_src-ae33d67ef68f2ddcfa0b4b10e491e98d90fb0cf1.zip
chromium_src-ae33d67ef68f2ddcfa0b4b10e491e98d90fb0cf1.tar.gz
chromium_src-ae33d67ef68f2ddcfa0b4b10e491e98d90fb0cf1.tar.bz2
window.open calls in ChromeFrame cause IE to navigate to a dummy URL which has a prefix like
gcf:attach_external_tab&. When the ExternalTabContainer receives an updated navigation state it passes this off to IE, where we look for the IWebBrowserEventSvc interface to fire navigation events which cause IE to update the address bar, etc. However this interface does not exist on IE6. The IDocObjectservice interface is available on IE6 which provides the functionality we need. This fixes bug http://code.google.com/p/chromium/issues/detail?id=33381 Bug=33381 Review URL: http://codereview.chromium.org/668033 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40667 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame')
-rw-r--r--chrome_frame/chrome_active_document.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/chrome_frame/chrome_active_document.cc b/chrome_frame/chrome_active_document.cc
index 40137e9..64cd750 100644
--- a/chrome_frame/chrome_active_document.cc
+++ b/chrome_frame/chrome_active_document.cc
@@ -598,8 +598,15 @@ void ChromeActiveDocument::UpdateNavigationState(
if (is_internal_navigation) {
ScopedComPtr<IDocObjectService> doc_object_svc;
ScopedComPtr<IWebBrowserEventsService> web_browser_events_svc;
+
DoQueryService(__uuidof(web_browser_events_svc), m_spClientSite,
web_browser_events_svc.Receive());
+
+ if (!web_browser_events_svc.get()) {
+ DoQueryService(SID_SShellBrowser, m_spClientSite,
+ doc_object_svc.Receive());
+ }
+
// web_browser_events_svc can be NULL on IE6.
if (web_browser_events_svc) {
VARIANT_BOOL should_cancel = VARIANT_FALSE;