Index: chrome/installer/gcapi/gcapi.cc |
=================================================================== |
--- chrome/installer/gcapi/gcapi.cc (revision 14735) |
+++ chrome/installer/gcapi/gcapi.cc (working copy) |
@@ -408,3 +408,42 @@ |
::CoUninitialize(); |
return ret; |
} |
+ |
+#pragma comment(linker, "/EXPORT:LaunchGoogleChromeWithDimensions=_LaunchGoogleChromeWithDimensions@16,PRIVATE") |
+DLLEXPORT BOOL __stdcall LaunchGoogleChromeWithDimensions(int x, |
+ int y, |
+ int width, |
+ int height) { |
+ if (!LaunchGoogleChrome()) |
+ return false; |
+ |
+ HWND handle = NULL; |
+ int seconds_elapsed = 0; |
+ |
+ // Chrome may have been launched, but the window may not have appeared |
+ // yet. Wait for it to appear for 10 seconds, but exit if it takes longer |
+ // than that. |
+ while (!handle && seconds_elapsed < 10) { |
+ handle = FindWindowEx(NULL, handle, L"Chrome_WidgetWin_0", NULL); |
+ if (!handle) { |
+ Sleep(1000); |
+ seconds_elapsed++; |
+ } |
+ } |
+ |
+ if(!handle) |
+ return false; |
+ |
+ // At this point, there are several top-level Chrome windows |
+ // but we only want the window that has child windows. |
+ |
+ // This loop iterates through all of the top-level Windows named |
+ // Chrome_WidgetWin_0, and looks for the first one with any children. |
+ while (handle && !FindWindowEx(handle, NULL, L"Chrome_WidgetWin_0", NULL)) { |
+ // Get the next top-level Chrome window. |
+ handle = FindWindowEx(NULL, handle, L"Chrome_WidgetWin_0", NULL); |
+ } |
+ |
+ return (handle && |
+ SetWindowPos(handle, 0, x, y, width, height, SWP_NOZORDER)); |
+} |