diff options
author | siggi@chromium.org <siggi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-25 14:03:01 +0000 |
---|---|---|
committer | siggi@chromium.org <siggi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-25 14:03:01 +0000 |
commit | c52a588a045e178468c392cd5b3bc58acf43b674 (patch) | |
tree | 2be194d33c2c56e3a2b4e30b3ca158106e4c7655 /ceee/ie/plugin | |
parent | 6931101e4df983c5f46404a1bc1d339df4af3a38 (diff) | |
download | chromium_src-c52a588a045e178468c392cd5b3bc58acf43b674.zip chromium_src-c52a588a045e178468c392cd5b3bc58acf43b674.tar.gz chromium_src-c52a588a045e178468c392cd5b3bc58acf43b674.tar.bz2 |
Hide the GCF window until we get an OnLoad/OnLoadError from GCF.
This prevents displaying the spurious "Aw Snap" we get otherwise.
BUG=64341
TEST=The spurious "Aw Snap" should no longer show.
Review URL: http://codereview.chromium.org/5296004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67407 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ceee/ie/plugin')
-rw-r--r-- | ceee/ie/plugin/toolband/tool_band.cc | 24 | ||||
-rw-r--r-- | ceee/ie/plugin/toolband/tool_band.h | 12 |
2 files changed, 34 insertions, 2 deletions
diff --git a/ceee/ie/plugin/toolband/tool_band.cc b/ceee/ie/plugin/toolband/tool_band.cc index 46f2bab..c0c74b5 100644 --- a/ceee/ie/plugin/toolband/tool_band.cc +++ b/ceee/ie/plugin/toolband/tool_band.cc @@ -316,6 +316,7 @@ HRESULT ToolBand::Teardown() { if (chrome_frame_) { ChromeFrameEvents::DispEventUnadvise(chrome_frame_); } + chrome_frame_window_ = NULL; if (web_browser_ && listening_to_browser_events_) { HostingBrowserEvents::DispEventUnadvise(web_browser_, @@ -364,6 +365,16 @@ LRESULT ToolBand::OnCreate(LPCREATESTRUCT lpCreateStruct) { return 1; } + // Get the GCF window and hide it for now. + CComQIPtr<IOleWindow> ole_window(chrome_frame_); + DCHECK(ole_window != NULL); + if (SUCCEEDED(ole_window->GetWindow(&chrome_frame_window_.m_hWnd))) { + // We hide the chrome frame window until onload in order to avoid + // seeing the "Aw Snap" that sometimes otherwise occurs during Chrome + // initialization. + chrome_frame_window_.ShowWindow(SW_HIDE); + } + // Hook up the chrome frame event listener. hr = ChromeFrameEvents::DispEventAdvise(chrome_frame_); if (FAILED(hr)) { @@ -558,6 +569,19 @@ STDMETHODIMP_(void) ToolBand::OnCfGetEnabledExtensionsComplete( directories.Detach(); } +STDMETHODIMP_(void) ToolBand::OnCfOnload(IDispatch* event) { + if (chrome_frame_window_.IsWindow()) { + VLOG(1) << "Showing the Chrome Frame window."; + chrome_frame_window_.ShowWindow(SW_SHOW); + } +} + +STDMETHODIMP_(void) ToolBand::OnCfOnloadError(IDispatch* event) { + // Handle error the same way as OnLoad. + LOG(ERROR) << "Chrome Frame reports onload error"; + OnCfOnload(event); +} + STDMETHODIMP_(void) ToolBand::OnIeNavigateComplete2(IDispatch* dispatch, VARIANT* url) { // The flag is cleared on navigation complete since at this point we are diff --git a/ceee/ie/plugin/toolband/tool_band.h b/ceee/ie/plugin/toolband/tool_band.h index aad04c5..4bd8852 100644 --- a/ceee/ie/plugin/toolband/tool_band.h +++ b/ceee/ie/plugin/toolband/tool_band.h @@ -91,6 +91,12 @@ class ATL_NO_VTABLE ToolBand : public CComObjectRootEx<CComSingleThreadModel>, SINK_ENTRY_INFO(0, DIID_DIChromeFrameEvents, CF_EVENT_DISPID_ONMESSAGE, OnCfMessage, &handler_type_idispatch_) + SINK_ENTRY_INFO(0, DIID_DIChromeFrameEvents, + CF_EVENT_DISPID_ONLOAD, + OnCfOnload, &handler_type_idispatch_) + SINK_ENTRY_INFO(0, DIID_DIChromeFrameEvents, + CF_EVENT_DISPID_ONLOADERROR, + OnCfOnloadError, &handler_type_idispatch_) SINK_ENTRY_INFO(1, DIID_DWebBrowserEvents2, DISPID_NAVIGATECOMPLETE2, OnIeNavigateComplete2, &handler_type_idispatch_variantref_) @@ -103,7 +109,6 @@ class ATL_NO_VTABLE ToolBand : public CComObjectRootEx<CComSingleThreadModel>, BEGIN_MSG_MAP(ToolBand) MSG_WM_CREATE(OnCreate) - MSG_WM_PAINT(OnPaint) MSG_WM_SIZE(OnSize) END_MSG_MAP() @@ -156,6 +161,8 @@ class ATL_NO_VTABLE ToolBand : public CComObjectRootEx<CComSingleThreadModel>, STDMETHOD_(void, OnCfGetEnabledExtensionsComplete)( SAFEARRAY* extension_directories); STDMETHOD_(void, OnCfMessage)(IDispatch* event); + STDMETHOD_(void, OnCfOnload)(IDispatch* event); + STDMETHOD_(void, OnCfOnloadError)(IDispatch* event); STDMETHOD_(void, OnIeNavigateComplete2)(IDispatch* dispatch, VARIANT* url); // @} @@ -231,8 +238,9 @@ class ATL_NO_VTABLE ToolBand : public CComObjectRootEx<CComSingleThreadModel>, // The URL to our extension. std::string extension_url_; - // Our Chrome frame instance. + // Our Chrome frame instance and its window. CComPtr<IChromeFrame> chrome_frame_; + CWindow chrome_frame_window_; // Indicates whether CloseDW() is being called on this tool band. bool is_quitting_; |