Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / webstore_private / webstore_private_apitest.cc
index 77c8ff1..d5e2f51 100644 (file)
@@ -4,39 +4,29 @@
 
 #include <vector>
 
-#include "base/callback_list.h"
-#include "base/file_util.h"
 #include "base/files/file_path.h"
-#include "base/strings/string_number_conversions.h"
+#include "base/files/file_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/api/identity/identity_api.h"
-#include "chrome/browser/extensions/api/management/management_api.h"
 #include "chrome/browser/extensions/api/webstore_private/webstore_private_api.h"
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "chrome/browser/extensions/extension_function_test_utils.h"
 #include "chrome/browser/extensions/extension_install_prompt.h"
-#include "chrome/browser/extensions/extension_install_ui.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/webstore_installer.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
-#include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h"
-#include "chrome/browser/signin/fake_signin_manager.h"
-#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
-#include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
-#include "components/signin/core/browser/signin_manager.h"
-#include "components/signin/core/browser/test_signin_client.h"
 #include "content/public/browser/gpu_data_manager.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
 #include "content/public/test/browser_test_utils.h"
+#include "extensions/browser/api/management/management_api.h"
+#include "extensions/browser/extension_system.h"
+#include "extensions/browser/install/extension_install_ui.h"
 #include "gpu/config/gpu_feature_type.h"
 #include "gpu/config/gpu_info.h"
 #include "net/dns/mock_host_resolver.h"
@@ -55,7 +45,7 @@ class WebstoreInstallListener : public WebstoreInstaller::Delegate {
   WebstoreInstallListener()
       : received_failure_(false), received_success_(false), waiting_(false) {}
 
-  virtual void OnExtensionInstallSuccess(const std::string& id) OVERRIDE {
+  void OnExtensionInstallSuccess(const std::string& id) override {
     received_success_ = true;
     id_ = id;
 
@@ -65,10 +55,10 @@ class WebstoreInstallListener : public WebstoreInstaller::Delegate {
     }
   }
 
-  virtual void OnExtensionInstallFailure(
+  void OnExtensionInstallFailure(
       const std::string& id,
       const std::string& error,
-      WebstoreInstaller::FailureReason reason) OVERRIDE {
+      WebstoreInstaller::FailureReason reason) override {
     received_failure_ = true;
     id_ = id;
     error_ = error;
@@ -102,69 +92,43 @@ class WebstoreInstallListener : public WebstoreInstaller::Delegate {
 // A base class for tests below.
 class ExtensionWebstorePrivateApiTest : public ExtensionApiTest {
  public:
-  ExtensionWebstorePrivateApiTest()
-      : signin_manager_(NULL),
-        token_service_(NULL) {}
-  virtual ~ExtensionWebstorePrivateApiTest() {}
+  ExtensionWebstorePrivateApiTest() {}
+  ~ExtensionWebstorePrivateApiTest() override {}
 
-  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
+  void SetUpCommandLine(CommandLine* command_line) override {
     ExtensionApiTest::SetUpCommandLine(command_line);
     command_line->AppendSwitchASCII(
         switches::kAppsGalleryURL,
         "http://www.example.com/files/extensions/api_test");
-    command_line->AppendSwitchASCII(
-        switches::kAppsGalleryInstallAutoConfirmForTests, "accept");
   }
 
-  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
+  void SetUpInProcessBrowserTestFixture() override {
     ExtensionApiTest::SetUpInProcessBrowserTestFixture();
 
     // Start up the test server and get us ready for calling the install
     // API functions.
     host_resolver()->AddRule("www.example.com", "127.0.0.1");
     ASSERT_TRUE(StartSpawnedTestServer());
-    ExtensionInstallUI::set_disable_failure_ui_for_tests();
-
-    will_create_browser_context_services_subscription_ =
-        BrowserContextDependencyManager::GetInstance()->
-            RegisterWillCreateBrowserContextServicesCallbackForTesting(
-                base::Bind(
-                    &ExtensionWebstorePrivateApiTest::
-                        OnWillCreateBrowserContextServices,
-                    base::Unretained(this))).Pass();
-  }
-
-  void OnWillCreateBrowserContextServices(content::BrowserContext* context) {
-    // Replace the signin manager and token service with fakes. Do this ahead of
-    // creating the browser so that a bunch of classes don't register as
-    // observers and end up needing to unregister when the fake is substituted.
-    SigninManagerFactory::GetInstance()->SetTestingFactory(
-        context, &FakeSigninManagerBase::Build);
-    ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory(
-        context, &BuildFakeProfileOAuth2TokenService);
+    extensions::ExtensionInstallUI::set_disable_failure_ui_for_tests();
   }
 
-  virtual void SetUpOnMainThread() OVERRIDE {
+  void SetUpOnMainThread() override {
     ExtensionApiTest::SetUpOnMainThread();
 
-    // Grab references to the fake signin manager and token service.
-    signin_manager_ =
-        static_cast<FakeSigninManagerForTesting*>(
-            SigninManagerFactory::GetInstance()->GetForProfile(profile()));
-    ASSERT_TRUE(signin_manager_);
-    token_service_ =
-        static_cast<FakeProfileOAuth2TokenService*>(
-            ProfileOAuth2TokenServiceFactory::GetInstance()->GetForProfile(
-                profile()));
-    ASSERT_TRUE(token_service_);
+    ExtensionInstallPrompt::g_auto_confirm_for_tests =
+        ExtensionInstallPrompt::ACCEPT;
+
+    ASSERT_TRUE(webstore_install_dir_.CreateUniqueTempDir());
+    webstore_install_dir_copy_ = webstore_install_dir_.path();
+    WebstoreInstaller::SetDownloadDirectoryForTests(
+        &webstore_install_dir_copy_);
   }
 
  protected:
   // Returns a test server URL, but with host 'www.example.com' so it matches
   // the web store app's extent that we set up via command line flags.
-  virtual GURL GetTestServerURL(const std::string& path) {
-    GURL url = test_server()->GetURL(
-        std::string("files/extensions/api_test/webstore_private/") + path);
+  GURL DoGetTestServerURL(const std::string& path) {
+    GURL url = test_server()->GetURL(path);
 
     // Replace the host with 'www.example.com' so it matches the web store
     // app's extent.
@@ -175,6 +139,11 @@ class ExtensionWebstorePrivateApiTest : public ExtensionApiTest {
     return url.ReplaceComponents(replace_host);
   }
 
+  virtual GURL GetTestServerURL(const std::string& path) {
+    return DoGetTestServerURL(
+        std::string("files/extensions/api_test/webstore_private/") + path);
+  }
+
   // Navigates to |page| and runs the Extension API test there. Any downloads
   // of extensions will return the contents of |crx_file|.
   bool RunInstallTest(const std::string& page, const std::string& crx_file) {
@@ -193,36 +162,19 @@ class ExtensionWebstorePrivateApiTest : public ExtensionApiTest {
 #endif
   }
 
-  // Navigates to |page| and waits for the API call.
-  void StartSignInTest(const std::string& page) {
-    ui_test_utils::NavigateToURL(browser(), GetTestServerURL(page));
-
-    // Wait for the API to be called.  A simple way to wait for this is to run
-    // some other JavaScript in the page and wait for a round-trip back to the
-    // browser process.
-    bool result = false;
-    ASSERT_TRUE(
-        content::ExecuteScriptAndExtractBool(
-            GetWebContents(), "window.domAutomationController.send(true)",
-            &result));
-    ASSERT_TRUE(result);
-  }
-
   content::WebContents* GetWebContents() {
     return browser()->tab_strip_model()->GetActiveWebContents();
   }
 
   ExtensionService* service() {
-    return browser()->profile()->GetExtensionService();
+    return ExtensionSystem::Get(browser()->profile())->extension_service();
   }
 
-  FakeSigninManagerForTesting* signin_manager_;
-  FakeProfileOAuth2TokenService* token_service_;
-
  private:
-  scoped_ptr<base::CallbackList<void(content::BrowserContext*)>::Subscription>
-      will_create_browser_context_services_subscription_;
-
+  base::ScopedTempDir webstore_install_dir_;
+  // WebstoreInstaller needs a reference to a FilePath when setting the download
+  // directory for testing.
+  base::FilePath webstore_install_dir_copy_;
 };
 
 // Test cases for webstore origin frame blocking.
@@ -262,7 +214,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, InstallAccepted) {
 }
 
 // Test having the default download directory missing.
- IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, MissingDownloadDir) {
+IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, MissingDownloadDir) {
   // Set a non-existent directory as the download path.
   base::ScopedTempDir temp_dir;
   EXPECT_TRUE(temp_dir.CreateUniqueTempDir());
@@ -285,8 +237,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, InstallLocalized) {
 
 // Now test the case where the user cancels the confirmation dialog.
 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, InstallCancelled) {
-  CommandLine::ForCurrentProcess()->AppendSwitchASCII(
-      switches::kAppsGalleryInstallAutoConfirmForTests, "cancel");
+  ExtensionInstallPrompt::g_auto_confirm_for_tests =
+      ExtensionInstallPrompt::CANCEL;
   ASSERT_TRUE(RunInstallTest("cancelled.html", "extension.crx"));
 }
 
@@ -443,131 +395,39 @@ IN_PROC_BROWSER_TEST_F(ExtensionWebstoreGetWebGLStatusTest, Blocked) {
   RunTest(webgl_allowed);
 }
 
-IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest,
-                       SignIn_UserGestureRequired) {
-  GURL page_url = GetTestServerURL("sign_in_user_gesture_required.html");
-  ASSERT_TRUE(RunPageTest(page_url.spec()));
-}
-
-IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest,
-                       SignIn_MissingContinueUrl) {
-  GURL page_url = GetTestServerURL("sign_in_missing_continue_url.html");
-  ASSERT_TRUE(RunPageTest(page_url.spec()));
-}
-
-IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest,
-                       SignIn_InvalidContinueUrl) {
-  GURL page_url = GetTestServerURL("sign_in_invalid_continue_url.html");
-  ASSERT_TRUE(RunPageTest(page_url.spec()));
-}
-
-IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest,
-                       SignIn_ContinueUrlOnDifferentOrigin) {
-  GURL page_url =
-      GetTestServerURL("sign_in_continue_url_on_different_origin.html");
-  ASSERT_TRUE(RunPageTest(page_url.spec()));
-}
+class EphemeralAppWebstorePrivateApiTest
+    : public ExtensionWebstorePrivateApiTest {
+ public:
+  void SetUpInProcessBrowserTestFixture() override {
+    ExtensionWebstorePrivateApiTest::SetUpInProcessBrowserTestFixture();
+
+    net::HostPortPair host_port = test_server()->host_port_pair();
+    std::string test_gallery_url = base::StringPrintf(
+        "http://www.example.com:%d/files/extensions/platform_apps/"
+        "ephemeral_launcher",
+        host_port.port());
+    CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+        switches::kAppsGalleryURL, test_gallery_url);
+  }
 
-IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest,
-                       SignIn_DisallowedInIncognito) {
-  // Make sure that the test is testing something more than the absence of a
-  // sign-in manager for this profile.
-  ASSERT_TRUE(SigninManagerFactory::GetForProfile(profile()));
+  GURL GetTestServerURL(const std::string& path) override {
+    return DoGetTestServerURL(
+        std::string("files/extensions/platform_apps/ephemeral_launcher/") +
+        path);
+  }
+};
 
-  GURL page_url =
-      GetTestServerURL("sign_in_disallowed_in_incognito.html");
-  ASSERT_TRUE(
-      RunPageTest(page_url.spec(), ExtensionApiTest::kFlagUseIncognito));
+// Run tests when the --enable-ephemeral-apps switch is not enabled.
+IN_PROC_BROWSER_TEST_F(EphemeralAppWebstorePrivateApiTest,
+                       EphemeralAppsFeatureDisabled) {
+  ASSERT_TRUE(RunInstallTest("webstore_launch_disabled.html", "app.crx"));
 }
 
-IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest,
-                       SignIn_DisabledWhenWebBasedSigninIsEnabled) {
-  // Make sure that the test is testing something more than the absence of a
-  // sign-in manager for this profile.
-  ASSERT_TRUE(SigninManagerFactory::GetForProfile(profile()));
-
+// Run tests when the --enable-ephemeral-apps switch is enabled.
+IN_PROC_BROWSER_TEST_F(EphemeralAppWebstorePrivateApiTest, LaunchEphemeralApp) {
   CommandLine::ForCurrentProcess()->AppendSwitch(
-      switches::kEnableWebBasedSignin);
-  GURL page_url = GetTestServerURL(
-      "sign_in_disabled_when_web_based_signin_is_enabled.html");
-  ASSERT_TRUE(RunPageTest(page_url.spec()));
-}
-
-IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest,
-                       SignIn_AlreadySignedIn) {
-  signin_manager_->SetAuthenticatedUsername("user@example.com");
-  GURL page_url = GetTestServerURL("sign_in_already_signed_in.html");
-  ASSERT_TRUE(RunPageTest(page_url.spec()));
-}
-
-// The FakeSignInManager class is not implemented for ChromeOS, so there's no
-// straightforward way to test these flows on that platform.
-#if !defined(OS_CHROMEOS)
-IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest,
-                       SignIn_AuthInProgress_Fails) {
-  // Initiate an authentication that will be in progress when the sign-in API is
-  // called.
-  signin_manager_->set_auth_in_progress("user@example.com");
-
-  // Navigate to the page, which will cause the sign-in API to be called.
-  // Then, complete the authentication in a failed state.
-  ResultCatcher catcher;
-  StartSignInTest("sign_in_auth_in_progress_fails.html");
-  signin_manager_->FailSignin(GoogleServiceAuthError::AuthErrorNone());
-  ASSERT_TRUE(catcher.GetNextResult());
-}
-
-IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest,
-                       SignIn_AuthInProgress_MergeSessionFails) {
-  // Initiate an authentication that will be in progress when the sign-in API is
-  // called.
-  signin_manager_->set_auth_in_progress("user@example.com");
-
-  // Navigate to the page, which will cause the sign-in API to be called.
-  // Then, complete the authentication in a successful state.
-  ResultCatcher catcher;
-  StartSignInTest("sign_in_auth_in_progress_merge_session_fails.html");
-  signin_manager_->CompletePendingSignin();
-  token_service_->IssueRefreshTokenForUser("user@example.com", "token");
-  signin_manager_->NotifyMergeSessionObservers(
-      GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE));
-  ASSERT_TRUE(catcher.GetNextResult());
-}
-
-IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest,
-                       SignIn_AuthInProgress_Succeeds) {
-  // Initiate an authentication that will be in progress when the sign-in API is
-  // called.
-  signin_manager_->set_auth_in_progress("user@example.com");
-
-  // Navigate to the page, which will cause the sign-in API to be called.
-  // Then, complete the authentication in a successful state.
-  ResultCatcher catcher;
-  StartSignInTest("sign_in_auth_in_progress_succeeds.html");
-  signin_manager_->CompletePendingSignin();
-  token_service_->IssueRefreshTokenForUser("user@example.com", "token");
-  signin_manager_->NotifyMergeSessionObservers(
-      GoogleServiceAuthError::AuthErrorNone());
-  ASSERT_TRUE(catcher.GetNextResult());
-}
-#endif  // !defined (OS_CHROMEOS)
-
-IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest,
-                       SignIn_RedirectToSignIn) {
-  GURL signin_url(
-      "chrome://chrome-signin/?source=5&"
-      "continue=http%3A%2F%2Fwww.example.com%3A" +
-      base::IntToString(test_server()->host_port_pair().port()) +
-      "%2Fcontinue");
-  ui_test_utils::UrlLoadObserver observer(
-      signin_url,
-      content::Source<content::NavigationController>(
-          &GetWebContents()->GetController()));
-  StartSignInTest("sign_in_redirect_to_sign_in.html");
-  observer.Wait();
-
-  // TODO(isherman): Also test the redirect back to the continue URL once
-  // sign-in completes?
+      switches::kEnableEphemeralApps);
+  ASSERT_TRUE(RunInstallTest("webstore_launch_app.html", "app.crx"));
 }
 
 }  // namespace extensions