Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / app_list / extension_app_model_builder_unittest.cc
index eafff39..b07eb0f 100644 (file)
@@ -16,6 +16,7 @@
 #include "chrome/browser/extensions/install_tracker.h"
 #include "chrome/browser/extensions/install_tracker_factory.h"
 #include "chrome/browser/ui/app_list/app_list_controller_delegate_impl.h"
+#include "chrome/common/chrome_constants.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_profile.h"
@@ -79,6 +80,10 @@ class TestAppListControllerDelegate : public AppListControllerDelegate {
   virtual void DoCreateShortcutsFlow(Profile* profile,
                                      const std::string& extension_id) OVERRIDE {
   }
+  virtual bool CanDoShowAppInfoFlow() OVERRIDE { return false; }
+  virtual void DoShowAppInfoFlow(Profile* profile,
+                                 const std::string& extension_id) OVERRIDE {
+  };
   virtual void CreateNewWindow(Profile* profile, bool incognito) OVERRIDE {}
   virtual void ActivateApp(Profile* profile,
                            const extensions::Extension* extension,
@@ -114,7 +119,7 @@ class ExtensionAppModelBuilderTest : public ExtensionServiceTestBase {
         .AppendASCII("Extensions");
     base::FilePath pref_path = source_install_dir
         .DirName()
-        .AppendASCII("Preferences");
+        .Append(chrome::kPreferencesFilename);
     InitializeInstalledExtensionService(pref_path, source_install_dir);
     service_->Init();
 
@@ -122,19 +127,30 @@ class ExtensionAppModelBuilderTest : public ExtensionServiceTestBase {
     const extensions::ExtensionSet* extensions = service_->extensions();
     ASSERT_EQ(static_cast<size_t>(4),  extensions->size());
 
+    CreateBuilder();
+  }
+
+  virtual void TearDown() OVERRIDE {
+    ResetBuilder();
+  }
+
+ protected:
+  // Creates a new builder, destroying any existing one.
+  void CreateBuilder() {
+    ResetBuilder();  // Destroy any existing builder in the correct order.
+
     model_.reset(new app_list::AppListModel);
     controller_.reset(new TestAppListControllerDelegate);
     builder_.reset(new ExtensionAppModelBuilder(controller_.get()));
     builder_->InitializeWithProfile(profile_.get(), model_.get());
   }
 
-  virtual void TearDown() OVERRIDE {
+  void ResetBuilder() {
     builder_.reset();
     controller_.reset();
     model_.reset();
   }
 
- protected:
   scoped_ptr<app_list::AppListModel> model_;
   scoped_ptr<TestAppListControllerDelegate> controller_;
   scoped_ptr<ExtensionAppModelBuilder> builder_;
@@ -281,7 +297,7 @@ TEST_F(ExtensionAppModelBuilderTest, InvalidOrdinal) {
   extensions::AppSorting* sorting = service_->extension_prefs()->app_sorting();
   sorting->ClearOrdinals(kPackagedApp1Id);
 
-  // Creates an corrupted ordinal case.
+  // Creates a corrupted ordinal case.
   extensions::ExtensionScopedPrefs* scoped_prefs = service_->extension_prefs();
   scoped_prefs->UpdateExtensionPref(
       kHostedAppId,
@@ -289,8 +305,7 @@ TEST_F(ExtensionAppModelBuilderTest, InvalidOrdinal) {
       base::Value::CreateStringValue("a corrupted ordinal"));
 
   // This should not assert or crash.
-  ExtensionAppModelBuilder builder1(controller_.get());
-  builder1.InitializeWithProfile(profile_.get(), model_.get());
+  CreateBuilder();
 }
 
 TEST_F(ExtensionAppModelBuilderTest, OrdinalConfilicts) {
@@ -309,10 +324,36 @@ TEST_F(ExtensionAppModelBuilderTest, OrdinalConfilicts) {
   sorting->SetAppLaunchOrdinal(kPackagedApp2Id, conflict_ordinal);
 
   // This should not assert or crash.
-  ExtensionAppModelBuilder builder1(controller_.get());
-  builder1.InitializeWithProfile(profile_.get(), model_.get());
+  CreateBuilder();
 
   // By default, conflicted items are sorted by their app ids (= order added).
   EXPECT_EQ(std::string("Hosted App,Packaged App 1,Packaged App 2"),
             GetModelContent(model_.get()));
 }
+
+// This test adds a bookmark app to the app list.
+TEST_F(ExtensionAppModelBuilderTest, BookmarkApp) {
+  const std::string kAppName = "Bookmark App";
+  const std::string kAppVersion = "2014.1.24.19748";
+  const std::string kAppUrl = "http://google.com";
+  const std::string kAppId = "podhdnefolignjhecmjkbimfgioanahm";
+  std::string err;
+  base::DictionaryValue value;
+  value.SetString("name", kAppName);
+  value.SetString("version", kAppVersion);
+  value.SetString("app.launch.web_url", kAppUrl);
+  scoped_refptr<extensions::Extension> bookmark_app =
+      extensions::Extension::Create(
+          base::FilePath(),
+          extensions::Manifest::INTERNAL,
+          value,
+          extensions::Extension::WAS_INSTALLED_BY_DEFAULT |
+              extensions::Extension::FROM_BOOKMARK,
+          kAppId,
+          &err);
+  EXPECT_TRUE(err.empty());
+
+  service_->AddExtension(bookmark_app.get());
+  EXPECT_EQ(kDefaultAppCount + 1, model_->item_list()->item_count());
+  EXPECT_NE(std::string::npos, GetModelContent(model_.get()).find(kAppName));
+}