#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/command_line.h"
-#include "base/file_util.h"
#include "base/files/file_path.h"
+#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/location.h"
#include "base/logging.h"
#include "base/run_loop.h"
#include "base/values.h"
#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/extensions/api/gcm/gcm_api.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/test_extension_service.h"
#include "chrome/browser/extensions/test_extension_system.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "content/public/test/test_utils.h"
#include "extensions/browser/extension_system.h"
+#include "extensions/browser/uninstall_reason.h"
#include "extensions/common/extension.h"
#include "extensions/common/manifest.h"
#include "extensions/common/manifest_constants.h"
#include "extensions/common/permissions/permissions_data.h"
#include "testing/gtest/include/gtest/gtest.h"
-#if !defined(OS_ANDROID)
-#include "chrome/browser/extensions/api/gcm/gcm_api.h"
-#endif
-
#if defined(OS_CHROMEOS)
-#include "chrome/browser/chromeos/login/users/user_manager.h"
+#include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
#include "chrome/browser/chromeos/settings/device_settings_service.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
#endif
namespace extensions {
// This is needed to create extension service under CrOS.
#if defined(OS_CHROMEOS)
test_user_manager_.reset(new chromeos::ScopedTestUserManager());
+ // Creating a DBus thread manager setter has the side effect of
+ // creating a DBusThreadManager, which is needed for testing.
+ // We don't actually need the setter so we ignore the return value.
+ chromeos::DBusThreadManager::GetSetterForTesting();
#endif
// Create a new profile.
manifest.SetString(manifest_keys::kVersion, "1.0.0.0");
manifest.SetString(manifest_keys::kName, kTestExtensionName);
base::ListValue* permission_list = new base::ListValue;
- permission_list->Append(base::Value::CreateStringValue("gcm"));
+ permission_list->Append(new base::StringValue("gcm"));
manifest.Set(manifest_keys::kPermissions, permission_list);
std::string error;
extensions::CrxInstaller* installer = NULL;
content::WindowedNotificationObserver observer(
- chrome::NOTIFICATION_CRX_INSTALLER_DONE,
+ extensions::NOTIFICATION_CRX_INSTALLER_DONE,
base::Bind(&IsCrxInstallerDone, &installer));
extension_service_->UpdateExtension(
extension->id(), path, true, &installer);
}
void UninstallExtension(const Extension* extension) {
- extension_service_->UninstallExtension(extension->id(), false, NULL);
+ extension_service_->UninstallExtension(
+ extension->id(),
+ extensions::UNINSTALL_REASON_FOR_TESTING,
+ base::Bind(&base::DoNothing),
+ NULL);
}
void SignIn(const std::string& username) {
}
void SignOut() {
- signin_manager_->SignOut();
+ signin_manager_->SignOut(signin_metrics::SIGNOUT_TEST);
waiter_.PumpIOLoop();
}
scoped_refptr<Extension> extension(CreateExtension());
// App handler is added when extension is loaded.
- LoadExtension(extension);
+ LoadExtension(extension.get());
waiter()->PumpUILoop();
EXPECT_TRUE(HasAppHandlers(extension->id()));
// App handler is removed when extension is unloaded.
- DisableExtension(extension);
+ DisableExtension(extension.get());
waiter()->PumpUILoop();
EXPECT_FALSE(HasAppHandlers(extension->id()));
// App handler is added when extension is reloaded.
- EnableExtension(extension);
+ EnableExtension(extension.get());
waiter()->PumpUILoop();
EXPECT_TRUE(HasAppHandlers(extension->id()));
// App handler is removed when extension is uninstalled.
- UninstallExtension(extension);
+ UninstallExtension(extension.get());
waiter()->PumpUILoop();
EXPECT_FALSE(HasAppHandlers(extension->id()));
}
TEST_F(ExtensionGCMAppHandlerTest, UnregisterOnExtensionUninstall) {
scoped_refptr<Extension> extension(CreateExtension());
- LoadExtension(extension);
+ LoadExtension(extension.get());
// Sign-in is needed for registration.
SignIn(kTestingUsername);
GetGCMDriver()->AddAppHandler("Foo", gcm_app_handler());
// Unregistration should be triggered when the extension is uninstalled.
- UninstallExtension(extension);
+ UninstallExtension(extension.get());
waiter()->WaitUntilCompleted();
EXPECT_EQ(gcm::GCMClient::SUCCESS,
gcm_app_handler()->unregistration_result());
scoped_refptr<Extension> extension(CreateExtension());
// App handler is added when the extension is loaded.
- LoadExtension(extension);
+ LoadExtension(extension.get());
waiter()->PumpUILoop();
EXPECT_TRUE(HasAppHandlers(extension->id()));
// App handler count should not drop to zero when the extension is updated.
- UpdateExtension(extension, "gcm2.crx");
+ UpdateExtension(extension.get(), "gcm2.crx");
waiter()->PumpUILoop();
EXPECT_FALSE(gcm_app_handler()->app_handler_count_drop_to_zero());
EXPECT_TRUE(HasAppHandlers(extension->id()));
scoped_refptr<Extension> extension(CreateExtension());
// App handler is added when the extension is loaded.
- LoadExtension(extension);
+ LoadExtension(extension.get());
waiter()->PumpUILoop();
EXPECT_TRUE(HasAppHandlers(extension->id()));
// App handler is removed when the extension is updated to the version that
// has GCM permission removed.
- UpdateExtension(extension, "good2.crx");
+ UpdateExtension(extension.get(), "good2.crx");
waiter()->PumpUILoop();
EXPECT_TRUE(gcm_app_handler()->app_handler_count_drop_to_zero());
EXPECT_FALSE(HasAppHandlers(extension->id()));