diff options
author | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-04 21:58:06 +0000 |
---|---|---|
committer | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-04 21:58:06 +0000 |
commit | ae33d67ef68f2ddcfa0b4b10e491e98d90fb0cf1 (patch) | |
tree | 711640f620bd64e8f5c378b46c57ba33fa35b53a /chrome_frame | |
parent | 728a67635f3e69b412c258b47091033c5573a49c (diff) | |
download | chromium_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.cc | 7 |
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; |