Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(367)

Side by Side Diff: win8/metro_driver/metro_driver_win7.cc

Issue 199843004: Chrome metro mode win7 emulation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « win8/metro_driver/metro_driver.gyp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "stdafx.h" 5 #include "stdafx.h"
6 #include <corewindow.h>
7
8 #include "base/logging.h"
6 9
7 EXTERN_C IMAGE_DOS_HEADER __ImageBase; 10 EXTERN_C IMAGE_DOS_HEADER __ImageBase;
8 11
9 struct Globals {
10 LPTHREAD_START_ROUTINE host_main;
11 void* host_context;
12 HWND core_window;
13 HWND host_window;
14 HANDLE host_thread;
15 DWORD main_thread_id;
16 } globals;
17
18
19 void ODS(const char* str, LONG_PTR val = 0) {
20 char buf[80];
21 size_t len = strlen(str);
22 if (len > 50) {
23 ::OutputDebugStringA("ODS: buffer too long");
24 return;
25 }
26
27 if (str[0] == '!') {
28 // Fatal error.
29 DWORD gle = ::GetLastError();
30 if (::IsDebuggerPresent())
31 __debugbreak();
32 wsprintfA(buf, "ODS:fatal %s (%p) gle=0x%x", str, val, gle);
33 ::MessageBoxA(NULL, buf, "!!!", MB_OK);
34 ::ExitProcess(gle);
35 } else {
36 // Just information.
37 wsprintfA(buf, "ODS:%s (%p)\n", str, val);
38 ::OutputDebugStringA(buf);
39 }
40 }
41
42 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, 12 LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
43 WPARAM wparam, LPARAM lparam) { 13 WPARAM wparam, LPARAM lparam) {
44 PAINTSTRUCT ps; 14 PAINTSTRUCT ps;
45 HDC hdc; 15 HDC hdc;
46 switch (message) { 16 switch (message) {
47 case WM_PAINT: 17 case WM_PAINT:
48 hdc = BeginPaint(hwnd, &ps); 18 hdc = BeginPaint(hwnd, &ps);
49 EndPaint(hwnd, &ps); 19 EndPaint(hwnd, &ps);
50 break; 20 break;
51 case WM_DESTROY: 21 case WM_DESTROY:
52 PostQuitMessage(0); 22 PostQuitMessage(0);
53 ODS("Metro WM_DESTROY received");
54 break; 23 break;
55 default: 24 default:
56 return DefWindowProc(hwnd, message, wparam, lparam); 25 return DefWindowProc(hwnd, message, wparam, lparam);
57 } 26 }
58 return 0; 27 return 0;
59 } 28 }
60 29
61 HWND CreateMetroTopLevelWindow() { 30 HWND CreateMetroTopLevelWindow() {
62 HINSTANCE hInst = reinterpret_cast<HINSTANCE>(&__ImageBase); 31 HINSTANCE hInst = reinterpret_cast<HINSTANCE>(&__ImageBase);
63 WNDCLASSEXW wcex; 32 WNDCLASSEXW wcex;
64 wcex.cbSize = sizeof(wcex); 33 wcex.cbSize = sizeof(wcex);
65 wcex.style = CS_HREDRAW | CS_VREDRAW; 34 wcex.style = CS_HREDRAW | CS_VREDRAW;
66 wcex.lpfnWndProc = WndProc; 35 wcex.lpfnWndProc = WndProc;
67 wcex.cbClsExtra = 0; 36 wcex.cbClsExtra = 0;
68 wcex.cbWndExtra = 0; 37 wcex.cbWndExtra = 0;
69 wcex.hInstance = hInst; 38 wcex.hInstance = hInst;
70 wcex.hIcon = 0; 39 wcex.hIcon = 0;
71 wcex.hCursor = LoadCursor(NULL, IDC_ARROW); 40 wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
72 wcex.hbrBackground = (HBRUSH)(COLOR_INACTIVECAPTION+1); 41 wcex.hbrBackground = (HBRUSH)(COLOR_INACTIVECAPTION+1);
73 wcex.lpszMenuName = 0; 42 wcex.lpszMenuName = 0;
74 wcex.lpszClassName = L"Windows.UI.Core.CoreWindow"; 43 wcex.lpszClassName = L"Windows.UI.Core.CoreWindow";
75 wcex.hIconSm = 0; 44 wcex.hIconSm = 0;
76 45
77 HWND hwnd = ::CreateWindowExW(0, 46 HWND hwnd = ::CreateWindowExW(0,
78 MAKEINTATOM(::RegisterClassExW(&wcex)), 47 MAKEINTATOM(::RegisterClassExW(&wcex)),
79 L"metro_metro", 48 L"metro_win7",
80 WS_POPUP, 49 WS_POPUP,
81 0, 0, 0, 0, 50 0, 0, 0, 0,
82 NULL, NULL, hInst, NULL); 51 NULL, NULL, hInst, NULL);
83 return hwnd; 52 return hwnd;
84 } 53 }
85 54
86 DWORD WINAPI HostThread(void*) { 55 typedef winfoundtn::ITypedEventHandler<
87 // The sleeps simulates the delay we have in the actual metro code 56 winapp::Core::CoreApplicationView*,
88 // which takes in account the corewindow being created and some other 57 winapp::Activation::IActivatedEventArgs*> ActivatedHandler;
89 // unknown machinations of metro. 58
90 ODS("Chrome main thread", ::GetCurrentThreadId()); 59 typedef winfoundtn::ITypedEventHandler<
91 ::Sleep(30); 60 winui::Core::CoreWindow*,
92 return globals.host_main(globals.host_context); 61 winui::Core::WindowActivatedEventArgs*> WindowActivatedHandler;
62
63 typedef winfoundtn::ITypedEventHandler<
64 winui::Core::CoreWindow*,
65 winui::Core::AutomationProviderRequestedEventArgs*>
66 AutomationProviderHandler;
67
68 typedef winfoundtn::ITypedEventHandler<
69 winui::Core::CoreWindow*,
70 winui::Core::CharacterReceivedEventArgs*> CharEventHandler;
71
72 typedef winfoundtn::ITypedEventHandler<
73 winui::Core::CoreWindow*,
74 winui::Core::CoreWindowEventArgs*> CoreWindowEventHandler;
75
76 typedef winfoundtn::ITypedEventHandler<
77 winui::Core::CoreWindow*,
78 winui::Core::InputEnabledEventArgs*> InputEnabledEventHandler;
79
80 typedef winfoundtn::ITypedEventHandler<
81 winui::Core::CoreWindow*,
82 winui::Core::KeyEventArgs*> KeyEventHandler;
83
84 typedef winfoundtn::ITypedEventHandler<
85 winui::Core::CoreWindow*,
86 winui::Core::PointerEventArgs*> PointerEventHandler;
87
88 typedef winfoundtn::ITypedEventHandler<
89 winui::Core::CoreWindow*,
90 winui::Core::WindowSizeChangedEventArgs*> SizeChangedHandler;
91
92 typedef winfoundtn::ITypedEventHandler<
93 winui::Core::CoreWindow*,
94 winui::Core::TouchHitTestingEventArgs*> TouchHitTestHandler;
95
96 typedef winfoundtn::ITypedEventHandler<
97 winui::Core::CoreWindow*,
98 winui::Core::VisibilityChangedEventArgs*> VisibilityChangedHandler;
99
100 // The following classes are the emulation of the WinRT system as exposed
101 // to metro applications. There is one application (ICoreApplication) which
102 // contains a series of Views (ICoreApplicationView) each one of them
103 // containing a CoreWindow which represents a surface that can drawn to
104 // and that receives events.
105 //
106 // Here is the general dependency hierachy in terms of interfaces:
107 //
108 // IFrameworkViewSource --> IFrameworkView
109 // ^ |
110 // | | metro app
111 // ---------------------------------------------------------------------
112 // | | winRT system
113 // | v
114 // ICoreApplication ICoreApplicationView
115 // |
116 // v
117 // ICoreWindow ----> ICoreWindowInterop
118 // |
119 // |
120 // V
121 // real HWND
122 //
123
124 class CoreWindowEmulation
125 : public mswr::RuntimeClass<
126 mswr::RuntimeClassFlags<mswr::WinRtClassicComMix>,
127 winui::Core::ICoreWindow, ICoreWindowInterop> {
128 public:
129 // ICoreWindow implementation:
130 virtual HRESULT STDMETHODCALLTYPE get_AutomationHostProvider(
131 IInspectable **value) {
132 return S_OK;
133 }
134
135 virtual HRESULT STDMETHODCALLTYPE get_Bounds(
136 winfoundtn::Rect* value) {
137 return S_OK;
138 }
139
140 virtual HRESULT STDMETHODCALLTYPE get_CustomProperties(
141 winfoundtn::Collections::IPropertySet **value) {
142 return S_OK;
143 }
144
145 virtual HRESULT STDMETHODCALLTYPE get_Dispatcher(
146 winui::Core::ICoreDispatcher **value) {
147 return S_OK;
148 }
149
150 virtual HRESULT STDMETHODCALLTYPE get_FlowDirection(
151 winui::Core::CoreWindowFlowDirection* value) {
152 return S_OK;
153 }
154
155 virtual HRESULT STDMETHODCALLTYPE put_FlowDirection(
156 winui::Core::CoreWindowFlowDirection value) {
157 return S_OK;
158 }
159
160 virtual HRESULT STDMETHODCALLTYPE get_IsInputEnabled(
161 boolean* value) {
162 return S_OK;
163 }
164
165 virtual HRESULT STDMETHODCALLTYPE put_IsInputEnabled(
166 boolean value) {
167 return S_OK;
168 }
169
170 virtual HRESULT STDMETHODCALLTYPE get_PointerCursor(
171 winui::Core::ICoreCursor **value) {
172 return S_OK;
173 }
174
175 virtual HRESULT STDMETHODCALLTYPE put_PointerCursor(
176 winui::Core::ICoreCursor* value) {
177 return S_OK;
178 }
179
180 virtual HRESULT STDMETHODCALLTYPE get_PointerPosition(
181 winfoundtn::Point* value) {
182 return S_OK;
183 }
184
185 virtual HRESULT STDMETHODCALLTYPE get_Visible(
186 boolean* value) {
187 return S_OK;
188 }
189
190 virtual HRESULT STDMETHODCALLTYPE Activate(void) {
191 return S_OK;
192 }
193
194 virtual HRESULT STDMETHODCALLTYPE Close(void) {
195 return S_OK;
196 }
197
198 virtual HRESULT STDMETHODCALLTYPE GetAsyncKeyState(
199 ABI::Windows::System::VirtualKey virtualKey,
200 winui::Core::CoreVirtualKeyStates* KeyState) {
201 return S_OK;
202 }
203
204 virtual HRESULT STDMETHODCALLTYPE GetKeyState(
205 ABI::Windows::System::VirtualKey virtualKey,
206 winui::Core::CoreVirtualKeyStates* KeyState) {
207 return S_OK;
208 }
209
210 virtual HRESULT STDMETHODCALLTYPE ReleasePointerCapture(void) {
211 return S_OK;
212 }
213
214 virtual HRESULT STDMETHODCALLTYPE SetPointerCapture(void) {
215 return S_OK;
216 }
217
218 virtual HRESULT STDMETHODCALLTYPE add_Activated(
219 WindowActivatedHandler* handler,
220 EventRegistrationToken* pCookie) {
221 return S_OK;
222 }
223
224 virtual HRESULT STDMETHODCALLTYPE remove_Activated(
225 EventRegistrationToken cookie) {
226 return S_OK;
227 }
228
229 virtual HRESULT STDMETHODCALLTYPE add_AutomationProviderRequested(
230 AutomationProviderHandler* handler,
231 EventRegistrationToken* cookie) {
232 return S_OK;
233 }
234
235 virtual HRESULT STDMETHODCALLTYPE remove_AutomationProviderRequested(
236 EventRegistrationToken cookie) {
237 return S_OK;
238 }
239
240 virtual HRESULT STDMETHODCALLTYPE add_CharacterReceived(
241 CharEventHandler* handler,
242 EventRegistrationToken* pCookie) {
243 return S_OK;
244 }
245
246 virtual HRESULT STDMETHODCALLTYPE remove_CharacterReceived(
247 EventRegistrationToken cookie) {
248 return S_OK;
249 }
250
251 virtual HRESULT STDMETHODCALLTYPE add_Closed(
252 CoreWindowEventHandler* handler,
253 EventRegistrationToken* pCookie) {
254 return S_OK;
255 }
256
257 virtual HRESULT STDMETHODCALLTYPE remove_Closed(
258 EventRegistrationToken cookie) {
259 return S_OK;
260 }
261
262 virtual HRESULT STDMETHODCALLTYPE add_InputEnabled(
263 InputEnabledEventHandler* handler,
264 EventRegistrationToken* pCookie) {
265 return S_OK;
266 }
267
268 virtual HRESULT STDMETHODCALLTYPE remove_InputEnabled(
269 EventRegistrationToken cookie) {
270 return S_OK;
271 }
272
273 virtual HRESULT STDMETHODCALLTYPE add_KeyDown(
274 KeyEventHandler* handler,
275 EventRegistrationToken* pCookie) {
276 return S_OK;
277 }
278
279 virtual HRESULT STDMETHODCALLTYPE remove_KeyDown(
280 EventRegistrationToken cookie) {
281 return S_OK;
282 }
283
284 virtual HRESULT STDMETHODCALLTYPE add_KeyUp(
285 KeyEventHandler* handler,
286 EventRegistrationToken* pCookie) {
287 return S_OK;
288 }
289
290 virtual HRESULT STDMETHODCALLTYPE remove_KeyUp(
291 EventRegistrationToken cookie) {
292 return S_OK;
293 }
294
295 virtual HRESULT STDMETHODCALLTYPE add_PointerCaptureLost(
296 PointerEventHandler* handler,
297 EventRegistrationToken* cookie) {
298 return S_OK;
299 }
300
301 virtual HRESULT STDMETHODCALLTYPE remove_PointerCaptureLost(
302 EventRegistrationToken cookie) {
303 return S_OK;
304 }
305
306 virtual HRESULT STDMETHODCALLTYPE add_PointerEntered(
307 PointerEventHandler* handler,
308 EventRegistrationToken* cookie) {
309 return S_OK;
310 }
311
312 virtual HRESULT STDMETHODCALLTYPE remove_PointerEntered(
313 EventRegistrationToken cookie) {
314 return S_OK;
315 }
316
317 virtual HRESULT STDMETHODCALLTYPE add_PointerExited(
318 PointerEventHandler* handler,
319 EventRegistrationToken* cookie) {
320 return S_OK;
321 }
322
323 virtual HRESULT STDMETHODCALLTYPE remove_PointerExited(
324 EventRegistrationToken cookie) {
325 return S_OK;
326 }
327
328 virtual HRESULT STDMETHODCALLTYPE add_PointerMoved(
329 PointerEventHandler* handler,
330 EventRegistrationToken* cookie) {
331 return S_OK;
332 }
333
334 virtual HRESULT STDMETHODCALLTYPE remove_PointerMoved(
335 EventRegistrationToken cookie) {
336 return S_OK;
337 }
338
339 virtual HRESULT STDMETHODCALLTYPE add_PointerPressed(
340 PointerEventHandler* handler,
341 EventRegistrationToken* cookie) {
342 return S_OK;
343 }
344
345 virtual HRESULT STDMETHODCALLTYPE remove_PointerPressed(
346 EventRegistrationToken cookie) {
347 return S_OK;
348 }
349
350 virtual HRESULT STDMETHODCALLTYPE add_PointerReleased(
351 PointerEventHandler* handler,
352 EventRegistrationToken* cookie) {
353 return S_OK;
354 }
355
356 virtual HRESULT STDMETHODCALLTYPE remove_PointerReleased(
357 EventRegistrationToken cookie) {
358 return S_OK;
359 }
360
361 virtual HRESULT STDMETHODCALLTYPE add_TouchHitTesting(
362 TouchHitTestHandler* handler,
363 EventRegistrationToken* pCookie) {
364 return S_OK;
365 }
366
367 virtual HRESULT STDMETHODCALLTYPE remove_TouchHitTesting(
368 EventRegistrationToken cookie) {
369 return S_OK;
370 }
371
372 virtual HRESULT STDMETHODCALLTYPE add_PointerWheelChanged(
373 PointerEventHandler* handler,
374 EventRegistrationToken* cookie) {
375 return S_OK;
376 }
377
378 virtual HRESULT STDMETHODCALLTYPE remove_PointerWheelChanged(
379 EventRegistrationToken cookie) {
380 return S_OK;
381 }
382
383 virtual HRESULT STDMETHODCALLTYPE add_SizeChanged(
384 SizeChangedHandler* handler,
385 EventRegistrationToken* pCookie) {
386 return S_OK;
387 }
388
389 virtual HRESULT STDMETHODCALLTYPE remove_SizeChanged(
390 EventRegistrationToken cookie) {
391 return S_OK;
392 }
393
394 virtual HRESULT STDMETHODCALLTYPE add_VisibilityChanged(
395 VisibilityChangedHandler* handler,
396 EventRegistrationToken* pCookie) {
397 return S_OK;
398 }
399
400 virtual HRESULT STDMETHODCALLTYPE remove_VisibilityChanged(
401 EventRegistrationToken cookie) {
402 return S_OK;
403 }
404
405 // ICoreWindowInterop implementation:
406 virtual HRESULT STDMETHODCALLTYPE get_WindowHandle(
407 HWND *hwnd) {
408 return S_OK;
409 }
410
411 virtual HRESULT STDMETHODCALLTYPE put_MessageHandled(
412 boolean value) {
413 return S_OK;
414 }
415
416 };
417
418 class CoreApplicationViewEmulation
419 : public mswr::RuntimeClass<winapp::Core::ICoreApplicationView> {
420 public:
421 CoreApplicationViewEmulation() {
422 core_window_ = mswr::Make<CoreWindowEmulation>();
423 }
424
425 virtual HRESULT STDMETHODCALLTYPE get_CoreWindow(
426 winui::Core::ICoreWindow **value) {
427 if (!core_window_)
428 return E_FAIL;
429 *value = core_window_.Get();
430 return S_OK;
431 }
432
433 virtual HRESULT STDMETHODCALLTYPE add_Activated(
434 ActivatedHandler* handler,
435 EventRegistrationToken* token) {
436 return S_OK;
437 }
438
439 virtual HRESULT STDMETHODCALLTYPE remove_Activated(
440 EventRegistrationToken token) {
441 return S_OK;
442 }
443
444 virtual HRESULT STDMETHODCALLTYPE get_IsMain(
445 boolean* value) {
446 return S_OK;
447 }
448
449 virtual HRESULT STDMETHODCALLTYPE get_IsHosted(
450 boolean* value) {
451 return S_OK;
452 }
453
454 private:
455 mswr::ComPtr<winui::Core::ICoreWindow> core_window_;
456 };
457
458 class CoreApplicationWin7Emulation
459 : public mswr::RuntimeClass<winapp::Core::ICoreApplication,
460 winapp::Core::ICoreApplicationExit> {
461 public:
462 // ICoreApplication implementation:
463
464 virtual HRESULT STDMETHODCALLTYPE get_Id(
465 HSTRING* value) {
466 return S_OK;
467 }
468
469 virtual HRESULT STDMETHODCALLTYPE add_Suspending(
470 winfoundtn::IEventHandler<winapp::SuspendingEventArgs*>* handler,
471 EventRegistrationToken* token) {
472 return S_OK;
473 }
474
475 virtual HRESULT STDMETHODCALLTYPE remove_Suspending(
476 EventRegistrationToken token) {
477 return S_OK;
478 }
479
480 virtual HRESULT STDMETHODCALLTYPE add_Resuming(
481 winfoundtn::IEventHandler<IInspectable*>* handler,
482 EventRegistrationToken* token) {
483 return S_OK;
484 }
485
486 virtual HRESULT STDMETHODCALLTYPE remove_Resuming(
487 EventRegistrationToken token) {
488 return S_OK;
489 }
490
491 virtual HRESULT STDMETHODCALLTYPE get_Properties(
492 winfoundtn::Collections::IPropertySet** value) {
493 return S_OK;
494 }
495
496 virtual HRESULT STDMETHODCALLTYPE GetCurrentView(
497 winapp::Core::ICoreApplicationView** value) {
498 return S_OK;
499 }
500
501 virtual HRESULT STDMETHODCALLTYPE Run(
502 winapp::Core::IFrameworkViewSource* viewSource) {
503 HRESULT hr = viewSource->CreateView(app_view_.GetAddressOf());
504 if (FAILED(hr))
505 return hr;
506 view_emulation_ = mswr::Make<CoreApplicationViewEmulation>();
507 hr = app_view_->Initialize(view_emulation_.Get());
508 if (FAILED(hr))
509 return hr;
510 mswr::ComPtr<winui::Core::ICoreWindow> core_window;
511 hr = view_emulation_->get_CoreWindow(core_window.GetAddressOf());
512 if (FAILED(hr))
513 return hr;
514 hr = app_view_->SetWindow(core_window.Get());
515 return hr;
516 }
517
518 virtual HRESULT STDMETHODCALLTYPE RunWithActivationFactories(
519 winfoundtn::IGetActivationFactory* activationFactoryCallback) {
520 return S_OK;
521 }
522
523 // ICoreApplicationExit implementation:
524
525 virtual HRESULT STDMETHODCALLTYPE Exit(void) {
526 return S_OK;
527 }
528
529 virtual HRESULT STDMETHODCALLTYPE add_Exiting(
530 winfoundtn::IEventHandler<IInspectable*>* handler,
531 EventRegistrationToken* token) {
532 return S_OK;
533 }
534
535 virtual HRESULT STDMETHODCALLTYPE remove_Exiting(
536 EventRegistrationToken token) {
537 return S_OK;
538 }
539
540 private:
541 mswr::ComPtr<winapp::Core::IFrameworkView> app_view_;
542 mswr::ComPtr<winapp::Core::ICoreApplicationView> view_emulation_;
543 };
544
545
546 mswr::ComPtr<winapp::Core::ICoreApplication> InitWindows7() {
547 HRESULT hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
548 if (FAILED(hr))
549 CHECK(false);
550 return mswr::Make<CoreApplicationWin7Emulation>();
93 } 551 }
94 552
95 extern "C" __declspec(dllexport)
96 int InitMetro(LPTHREAD_START_ROUTINE thread_proc, void* context) {
97 ODS("InitMetro [Win7 emulation]");
98 HWND window = CreateMetroTopLevelWindow();
99 if (!window)
100 return 1;
101 // This magic incatation tells windows that the window is going fullscreen
102 // so the taskbar gets out of the wait automatically.
103 ::SetWindowPos(window,
104 HWND_TOP,
105 0,0,
106 GetSystemMetrics(SM_CXSCREEN),
107 GetSystemMetrics(SM_CYSCREEN),
108 SWP_SHOWWINDOW);
109
110 // Ready to start our caller.
111 globals.core_window = window;
112 globals.host_main = thread_proc;
113 globals.host_context = context;
114 HANDLE thread = ::CreateThread(NULL, 0, &HostThread, NULL, 0, NULL);
115
116 // Main message loop.
117 MSG msg = {0};
118 while (GetMessage(&msg, NULL, 0, 0)) {
119 TranslateMessage(&msg);
120 DispatchMessage(&msg);
121 }
122
123 return (int) msg.wParam;
124 }
125
126 extern "C" _declspec(dllexport) HWND GetRootWindow() {
127 ODS("GetRootWindow", ULONG_PTR(globals.core_window));
128 return globals.core_window;
129 }
130
131 extern "C" _declspec(dllexport) void SetFrameWindow(HWND window) {
132 ODS("SetFrameWindow", ULONG_PTR(window));
133 globals.host_window = window;
134 }
135
136 extern "C" __declspec(dllexport) const wchar_t* GetInitialUrl() {
137 return L"";
138 }
139
OLDNEW
« no previous file with comments | « win8/metro_driver/metro_driver.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698