Chromium Code Reviews| 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" |
|
darin (slow to review)
2012/03/19 16:30:45
nit: new line above here
|
| + |
| +#include <windows.h> |
|
darin (slow to review)
2012/03/19 16:30:45
nit: already have this include from the header fil
|
| + |
| +namespace { |
| +// The windows 8 metro driver dll name and entry point. |
| +const char kMetroDriverDll[] = "metro_driver.dll"; |
| +typedef int (*InitMetro)(LPTHREAD_START_ROUTINE thread_proc, void* context); |
|
darin (slow to review)
2012/03/19 16:30:45
nit: recommend placing typedef apart from the cons
|
| +// This environment variable controls the loading of the metro driver DLL. |
| +const char* kMetroModeEnvVar = "CHROME_METRO_DLL"; |
| + |
| +struct Context { |
| + 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 |