Home | History | Annotate | Download | only in gcapi
      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
      3 // found in the LICENSE file.
      4 
      5 #include <stdio.h>
      6 
      7 #include "base/command_line.h"
      8 #include "chrome/installer/gcapi/gcapi.h"
      9 #include "testing/gtest/include/gtest/gtest.h"
     10 
     11 void call_statically() {
     12   DWORD reason = 0;
     13   BOOL result_flag_on = FALSE;
     14   BOOL result_flag_off = FALSE;
     15 
     16   // running this twice verifies that the first call does not set
     17   // a flag that would make the second fail.  Thus, the results
     18   // of the two calls should be the same (no state should have changed)
     19   result_flag_off = GoogleChromeCompatibilityCheck(
     20       FALSE, GCAPI_INVOKED_STANDARD_SHELL, &reason);
     21   result_flag_on = GoogleChromeCompatibilityCheck(
     22       TRUE, GCAPI_INVOKED_STANDARD_SHELL, &reason);
     23 
     24   if (result_flag_off != result_flag_on)
     25       printf("Registry key flag is not being set properly.");
     26 
     27   printf("Static call returned result as %d and reason as %d.\n",
     28          result_flag_on, reason);
     29 }
     30 
     31 void call_dynamically() {
     32   HMODULE module = LoadLibrary(L"gcapi_dll.dll");
     33   if (module == NULL) {
     34     printf("Couldn't load gcapi_dll.dll.\n");
     35     return;
     36   }
     37 
     38   GCCC_CompatibilityCheck gccfn = (GCCC_CompatibilityCheck) GetProcAddress(
     39       module, "GoogleChromeCompatibilityCheck");
     40   if (gccfn != NULL) {
     41     DWORD reason = 0;
     42 
     43     // running this twice verifies that the first call does not set
     44     // a flag that would make the second fail.  Thus, the results
     45     // of the two calls should be the same (no state should have changed)
     46     BOOL result_flag_off = gccfn(FALSE, GCAPI_INVOKED_STANDARD_SHELL, &reason);
     47     BOOL result_flag_on = gccfn(TRUE, GCAPI_INVOKED_STANDARD_SHELL, &reason);
     48 
     49     if (result_flag_off != result_flag_on)
     50       printf("Registry key flag is not being set properly.");
     51 
     52     printf("Dynamic call returned result as %d and reason as %d.\n",
     53            result_flag_on, reason);
     54   } else {
     55     printf("Couldn't find GoogleChromeCompatibilityCheck() in gcapi_dll.\n");
     56   }
     57   FreeLibrary(module);
     58 }
     59 
     60 const char kManualLaunchTests[] = "launch-chrome";
     61 
     62 int main(int argc, char* argv[]) {
     63   CommandLine::Init(argc, argv);
     64 
     65   testing::InitGoogleTest(&argc, argv);
     66   RUN_ALL_TESTS();
     67 
     68   if (CommandLine::ForCurrentProcess()->HasSwitch(kManualLaunchTests)) {
     69     call_dynamically();
     70     call_statically();
     71     printf("LaunchChrome returned %d.\n", LaunchGoogleChrome());
     72   }
     73 }
     74