Index: chrome/app/metro_driver_win.cc |
=================================================================== |
--- chrome/app/metro_driver_win.cc (revision 0) |
+++ chrome/app/metro_driver_win.cc (revision 0) |
@@ -0,0 +1,49 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "metro_driver_win.h" |
+ |
+namespace { |
+// The windows 8 metro driver dll name and entry point. |
+const char kMetroDriverDll[] = "metro_driver.dll"; |
+// This environment variable controls the loading of the metro driver DLL. |
+const char* kMetroModeEnvVar = "CHROME_METRO_DLL"; |
+ |
+typedef int (*InitMetro)(LPTHREAD_START_ROUTINE thread_proc, void* context); |
+ |
+struct Context { |
+ MetroDriver::MainFn fn; |
+ HINSTANCE instance; |
+}; |
+ |
+DWORD WINAPI MainThread(void* param) { |
+ Context* context = reinterpret_cast<Context*>(param); |
+ int rv = context->fn(context->instance); |
+ delete context; |
+ return rv; |
+} |
+ |
+} // namespace |
+ |
+MetroDriver::MetroDriver() : init_metro_fn_(NULL) { |
+ if (0 != ::GetEnvironmentVariableA(kMetroModeEnvVar, NULL, 0)) |
+ return; |
+ // We haven't tried to load the metro driver, this probably means we are the |
+ // browser. Find it or not we set the environment variable because we don't |
+ // want to keep trying in the child processes. |
+ HMODULE metro_dll = ::LoadLibraryA(kMetroDriverDll); |
+ ::SetEnvironmentVariableA(kMetroModeEnvVar, metro_dll ? "1" : "0"); |
+ if (!metro_dll) |
+ return; |
+ init_metro_fn_ = |
+ ::GetProcAddress(::GetModuleHandleA(kMetroDriverDll), "InitMetro"); |
+} |
+ |
+int MetroDriver::RunInMetro(HINSTANCE instance, MainFn main_fn) { |
+ Context* context = new Context; |
+ context->fn = main_fn; |
+ context->instance = instance; |
+ |
+ return reinterpret_cast<InitMetro>(init_metro_fn_)(&MainThread, context); |
+} |
Property changes on: chrome\app\metro_driver_win.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |