summaryrefslogtreecommitdiffstats
path: root/ceee/ie/plugin
diff options
context:
space:
mode:
authorsiggi@chromium.org <siggi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-25 14:03:01 +0000
committersiggi@chromium.org <siggi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-25 14:03:01 +0000
commitc52a588a045e178468c392cd5b3bc58acf43b674 (patch)
tree2be194d33c2c56e3a2b4e30b3ca158106e4c7655 /ceee/ie/plugin
parent6931101e4df983c5f46404a1bc1d339df4af3a38 (diff)
downloadchromium_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.cc24
-rw-r--r--ceee/ie/plugin/toolband/tool_band.h12
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_;