| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include <atlbase.h> | |
| 6 #include <atlwin.h> | |
| 7 #include <atlhost.h> | |
| 8 | |
| 9 #include "base/test/perf_time_logger.h" | |
| 10 #include "base/win/scoped_comptr.h" | |
| 11 #include "chrome_frame/test/perf/chrome_frame_perftest.h" | |
| 12 | |
| 13 interface IXcpControlDownloadCallback; | |
| 14 interface __declspec(uuid("1B36028E-B491-4bb2-8584-8A9E0A677D6E")) | |
| 15 IXcpControlHost : public IUnknown { | |
| 16 typedef enum { | |
| 17 XcpHostOption_FreezeOnInitialFrame = 0x001, | |
| 18 XcpHostOption_DisableFullScreen = 0x002, | |
| 19 XcpHostOption_DisableManagedExecution = 0x008, | |
| 20 XcpHostOption_EnableCrossDomainDownloads = 0x010, | |
| 21 XcpHostOption_UseCustomAppDomain = 0x020, | |
| 22 XcpHostOption_DisableNetworking = 0x040, | |
| 23 XcpHostOption_DisableScriptCallouts = 0x080, | |
| 24 XcpHostOption_EnableHtmlDomAccess = 0x100, | |
| 25 XcpHostOption_EnableScriptableObjectAccess = 0x200, | |
| 26 } XcpHostOptions; | |
| 27 | |
| 28 STDMETHOD(GetHostOptions)(DWORD* pdwOptions) PURE; | |
| 29 STDMETHOD(NotifyLoaded()) PURE; | |
| 30 STDMETHOD(NotifyError)(BSTR bstrError, BSTR bstrSource, | |
| 31 long nLine, long nColumn) PURE; | |
| 32 STDMETHOD(InvokeHandler)(BSTR bstrName, VARIANT varArg1, VARIANT varArg2, | |
| 33 VARIANT* pvarResult) PURE; | |
| 34 STDMETHOD(GetBaseUrl)(BSTR* pbstrUrl) PURE; | |
| 35 STDMETHOD(GetNamedSource)(BSTR bstrSourceName, BSTR* pbstrSource) PURE; | |
| 36 STDMETHOD(DownloadUrl)(BSTR bstrUrl, IXcpControlDownloadCallback* pCallback, | |
| 37 IStream** ppStream) PURE; | |
| 38 }; | |
| 39 | |
| 40 // Not templatized, to trade execution speed vs typing | |
| 41 class IXcpControlHostImpl : public IXcpControlHost { | |
| 42 public: | |
| 43 STDMETHOD(GetHostOptions)(DWORD* pdwOptions) { | |
| 44 return E_NOTIMPL; | |
| 45 } | |
| 46 | |
| 47 STDMETHOD(NotifyLoaded()) { | |
| 48 return E_NOTIMPL; | |
| 49 } | |
| 50 | |
| 51 STDMETHOD(NotifyError)(BSTR bstrError, BSTR bstrSource, | |
| 52 long nLine, long nColumn) { | |
| 53 return E_NOTIMPL; | |
| 54 } | |
| 55 | |
| 56 STDMETHOD(InvokeHandler)(BSTR bstrName, VARIANT varArg1, VARIANT varArg2, | |
| 57 VARIANT* pvarResult) { | |
| 58 return E_NOTIMPL; | |
| 59 } | |
| 60 | |
| 61 STDMETHOD(GetBaseUrl)(BSTR* pbstrUrl) { | |
| 62 return E_NOTIMPL; | |
| 63 } | |
| 64 | |
| 65 STDMETHOD(GetNamedSource)(BSTR bstrSourceName, BSTR* pbstrSource) { | |
| 66 return E_NOTIMPL; | |
| 67 } | |
| 68 | |
| 69 STDMETHOD(DownloadUrl)(BSTR bstrUrl, IXcpControlDownloadCallback* pCallback, | |
| 70 IStream** ppStream) { | |
| 71 return E_NOTIMPL; | |
| 72 } | |
| 73 }; | |
| 74 | |
| 75 // Silverlight container. Supports do-nothing implementation of IXcpControlHost. | |
| 76 // Should be extended to do some real movie-or-something download. | |
| 77 class SilverlightContainer | |
| 78 : public IServiceProviderImpl<SilverlightContainer>, | |
| 79 public IXcpControlHostImpl, | |
| 80 public CWindowImpl< | |
| 81 SilverlightContainer, | |
| 82 CWindow, | |
| 83 CWinTraits<WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN | | |
| 84 WS_CLIPSIBLINGS, | |
| 85 WS_EX_APPWINDOW | WS_EX_WINDOWEDGE> >, | |
| 86 public CComObjectRootEx<CComSingleThreadModel> { | |
| 87 public: | |
| 88 DECLARE_WND_CLASS_EX(L"Silverlight_container", 0, 0) | |
| 89 BEGIN_COM_MAP(SilverlightContainer) | |
| 90 COM_INTERFACE_ENTRY(IServiceProvider) | |
| 91 COM_INTERFACE_ENTRY(IXcpControlHost) | |
| 92 END_COM_MAP() | |
| 93 | |
| 94 BEGIN_SERVICE_MAP(SilverlightContainer) | |
| 95 SERVICE_ENTRY(__uuidof(IXcpControlHost)) | |
| 96 END_SERVICE_MAP() | |
| 97 | |
| 98 BEGIN_MSG_MAP(ChromeFrameActiveXContainer) | |
| 99 MESSAGE_HANDLER(WM_DESTROY, OnDestroy) | |
| 100 END_MSG_MAP() | |
| 101 | |
| 102 LRESULT OnDestroy(UINT, WPARAM, LPARAM, BOOL& handled) { | |
| 103 host_.Release(); | |
| 104 return 0; | |
| 105 } | |
| 106 | |
| 107 virtual void OnFinalMessage(HWND ) { | |
| 108 } | |
| 109 | |
| 110 static const wchar_t* GetWndCaption() { | |
| 111 return L"Silverlight Container"; | |
| 112 } | |
| 113 | |
| 114 HRESULT CreateWndAndHost(RECT* r) { | |
| 115 Create(NULL, r); | |
| 116 ShowWindow(SW_SHOWDEFAULT); | |
| 117 | |
| 118 CComPtr<IUnknown> spUnkContainer; | |
| 119 HRESULT hr = CAxHostWindow::_CreatorClass::CreateInstance(NULL, | |
| 120 __uuidof(IAxWinHostWindow), reinterpret_cast<void**>(&host_)); | |
| 121 if (SUCCEEDED(hr)) { | |
| 122 CComPtr<IObjectWithSite> p; | |
| 123 hr = host_.QueryInterface(&p); | |
| 124 if (SUCCEEDED(hr)) { | |
| 125 p->SetSite(GetUnknown()); | |
| 126 } | |
| 127 } | |
| 128 return hr; | |
| 129 } | |
| 130 | |
| 131 HRESULT CreateControl() { | |
| 132 HRESULT hr = host_->CreateControl(L"AgControl.AgControl", m_hWnd, NULL); | |
| 133 EXPECT_HRESULT_SUCCEEDED(hr); | |
| 134 return hr; | |
| 135 } | |
| 136 | |
| 137 base::win::ScopedComPtr<IAxWinHostWindow> host_; | |
| 138 }; | |
| 139 | |
| 140 // Create and in-place Silverlight control. Should be extended to do something | |
| 141 // more meaningful. | |
| 142 TEST(ChromeFramePerf, DISABLED_HostSilverlight2) { | |
| 143 SimpleModule module; | |
| 144 AtlAxWinInit(); | |
| 145 CComObjectStackEx<SilverlightContainer> wnd; | |
| 146 RECT rc = {0, 0, 800, 600}; | |
| 147 wnd.CreateWndAndHost(&rc); | |
| 148 base::PerfTimeLogger perf_create("Create Silverlight Control2"); | |
| 149 wnd.CreateControl(); | |
| 150 perf_create.Done(); | |
| 151 wnd.DestroyWindow(); | |
| 152 } | |
| 153 | |
| 154 // Simplest test - creates in-place Silverlight control. | |
| 155 TEST(ChromeFramePerf, DISABLED_HostSilverlight) { | |
| 156 SimpleModule module; | |
| 157 AtlAxWinInit(); | |
| 158 CAxWindow host; | |
| 159 RECT rc = {0, 0, 800, 600}; | |
| 160 base::PerfTimeLogger perf_create("Create Silverlight Control"); | |
| 161 host.Create(NULL, rc, L"AgControl.AgControl", | |
| 162 WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, | |
| 163 WS_EX_APPWINDOW | WS_EX_WINDOWEDGE); | |
| 164 EXPECT_TRUE(host.m_hWnd != NULL); | |
| 165 base::win::ScopedComPtr<IDispatch> disp; | |
| 166 HRESULT hr = host.QueryControl(disp.Receive()); | |
| 167 EXPECT_HRESULT_SUCCEEDED(hr); | |
| 168 disp.Release(); | |
| 169 perf_create.Done(); | |
| 170 } | |
| 171 | |
| OLD | NEW |