#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"
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,
.AppendASCII("Extensions");
base::FilePath pref_path = source_install_dir
.DirName()
- .AppendASCII("Preferences");
+ .Append(chrome::kPreferencesFilename);
InitializeInstalledExtensionService(pref_path, source_install_dir);
service_->Init();
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_;
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,
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) {
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));
+}