Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / sessions / sessions_apitest.cc
index a02a51e..28cb25e 100644 (file)
@@ -11,8 +11,9 @@
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "chrome/browser/extensions/extension_function_test_utils.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/sync/glue/session_model_associator.h"
+#include "chrome/browser/sync/glue/local_device_info_provider_mock.h"
 #include "chrome/browser/sync/open_tabs_ui_delegate.h"
+#include "chrome/browser/sync/profile_sync_components_factory_mock.h"
 #include "chrome/browser/sync/profile_sync_service.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
 #include "chrome/browser/sync/profile_sync_service_mock.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/test_switches.h"
 #include "chrome/test/base/testing_browser_process.h"
+#include "sync/api/attachments/attachment_id.h"
 #include "sync/api/fake_sync_change_processor.h"
 #include "sync/api/sync_error_factory_mock.h"
+#include "sync/internal_api/public/attachments/attachment_service_proxy_for_test.h"
+
+#if defined(OS_CHROMEOS)
+#include "chromeos/chromeos_switches.h"
+#endif
 
 namespace utils = extension_function_test_utils;
 
@@ -77,8 +84,12 @@ void BuildTabSpecifics(const std::string& tag, int window_id, int tab_id,
 
 class ExtensionSessionsTest : public InProcessBrowserTest {
  public:
+  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
   virtual void SetUpOnMainThread() OVERRIDE;
  protected:
+  static KeyedService* BuildProfileSyncService(
+      content::BrowserContext* profile);
+
   void CreateTestProfileSyncService();
   void CreateTestExtension();
   void CreateSessionModels();
@@ -92,15 +103,42 @@ class ExtensionSessionsTest : public InProcessBrowserTest {
   };
 
   Browser* browser_;
-  browser_sync::SessionModelAssociator* associator_;
   scoped_refptr<extensions::Extension> extension_;
 };
 
+void ExtensionSessionsTest::SetUpCommandLine(CommandLine* command_line) {
+#if defined(OS_CHROMEOS)
+  command_line->AppendSwitch(
+      chromeos::switches::kIgnoreUserProfileMappingForTests);
+#endif
+}
+
 void ExtensionSessionsTest::SetUpOnMainThread() {
   CreateTestProfileSyncService();
   CreateTestExtension();
 }
 
+KeyedService* ExtensionSessionsTest::BuildProfileSyncService(
+    content::BrowserContext* profile) {
+
+  ProfileSyncComponentsFactoryMock* factory =
+      new ProfileSyncComponentsFactoryMock();
+
+  factory->SetLocalDeviceInfoProvider(
+      scoped_ptr<sync_driver::LocalDeviceInfoProvider>(
+          new browser_sync::LocalDeviceInfoProviderMock(
+              kSessionTags[0],
+              "machine name",
+              "Chromium 10k",
+              "Chrome 10k",
+              sync_pb::SyncEnums_DeviceType_TYPE_LINUX,
+              "device_id")));
+
+  return new ProfileSyncServiceMock(
+      scoped_ptr<ProfileSyncComponentsFactory>(factory),
+      static_cast<Profile*>(profile));
+}
+
 void ExtensionSessionsTest::CreateTestProfileSyncService() {
   ProfileManager* profile_manager = g_browser_process->profile_manager();
   base::FilePath path;
@@ -111,41 +149,26 @@ void ExtensionSessionsTest::CreateTestProfileSyncService() {
   Profile* profile =
       Profile::CreateProfile(path, NULL, Profile::CREATE_MODE_SYNCHRONOUS);
   profile_manager->RegisterTestingProfile(profile, true, false);
-  browser_ = new Browser(Browser::CreateParams(
-      profile, chrome::HOST_DESKTOP_TYPE_NATIVE));
   ProfileSyncServiceMock* service = static_cast<ProfileSyncServiceMock*>(
       ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
-      profile, &ProfileSyncServiceMock::BuildMockProfileSyncService));
-
-  if (CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kDisableSyncSessionsV2)) {
-    associator_ = new browser_sync::SessionModelAssociator(
-        static_cast<ProfileSyncService*>(service), true);
-    associator_->SetCurrentMachineTagForTesting(kSessionTags[0]);
-    ON_CALL(*service, GetSessionModelAssociatorDeprecated())
-        .WillByDefault(testing::Return(associator_));
-  }
+      profile, &ExtensionSessionsTest::BuildProfileSyncService));
+  browser_ = new Browser(Browser::CreateParams(
+      profile, chrome::HOST_DESKTOP_TYPE_NATIVE));
 
   syncer::ModelTypeSet preferred_types;
   preferred_types.Put(syncer::SESSIONS);
   GoogleServiceAuthError no_error(GoogleServiceAuthError::NONE);
-  ON_CALL(*service, IsSessionsDataTypeControllerRunning())
+  ON_CALL(*service, IsDataTypeControllerRunning(syncer::SESSIONS))
       .WillByDefault(testing::Return(true));
+  ON_CALL(*service, GetRegisteredDataTypes())
+      .WillByDefault(testing::Return(syncer::UserTypes()));
   ON_CALL(*service, GetPreferredDataTypes()).WillByDefault(
       testing::Return(preferred_types));
   EXPECT_CALL(*service, GetAuthError()).WillRepeatedly(
       testing::ReturnRef(no_error));
   ON_CALL(*service, GetActiveDataTypes()).WillByDefault(
       testing::Return(preferred_types));
-  ON_CALL(*service, GetLocalDeviceInfoMock()).WillByDefault(
-      testing::Return(new browser_sync::DeviceInfo(
-          std::string(kSessionTags[0]),
-          "machine name",
-          "Chromium 10k",
-          "Chrome 10k",
-          sync_pb::SyncEnums_DeviceType_TYPE_LINUX)));
-  ON_CALL(*service, GetLocalSyncCacheGUID()).WillByDefault(
-      testing::Return(std::string(kSessionTags[0])));
+
   EXPECT_CALL(*service, AddObserver(testing::_)).Times(testing::AnyNumber());
   EXPECT_CALL(*service, RemoveObserver(testing::_)).Times(testing::AnyNumber());
 
@@ -176,39 +199,33 @@ void ExtensionSessionsTest::CreateSessionModels() {
       BuildTabSpecifics(kSessionTags[index], 0, tab_list1[i], &tabs1[i]);
     }
 
-    if (!CommandLine::ForCurrentProcess()->HasSwitch(
-            switches::kDisableSyncSessionsV2)) {
+    sync_pb::EntitySpecifics entity;
+    entity.mutable_session()->CopyFrom(meta);
+    initial_data.push_back(syncer::SyncData::CreateRemoteData(
+        1,
+        entity,
+        base::Time(),
+        syncer::AttachmentIdList(),
+        syncer::AttachmentServiceProxyForTest::Create()));
+    for (size_t i = 0; i < tabs1.size(); i++) {
       sync_pb::EntitySpecifics entity;
-      entity.mutable_session()->CopyFrom(meta);
-      initial_data.push_back(
-          syncer::SyncData::CreateRemoteData(1, entity, base::Time()));
-      for (size_t i = 0; i < tabs1.size(); i++) {
-        sync_pb::EntitySpecifics entity;
-        entity.mutable_session()->CopyFrom(tabs1[i]);
-        initial_data.push_back(syncer::SyncData::CreateRemoteData(
-            i + 2, entity, base::Time()));
-      }
-    } else {
-      // Update associator with the session's meta node containing one window.
-      associator_->AssociateForeignSpecifics(meta, base::Time());
-      // Add tabs for the window.
-      std::vector<sync_pb::SessionSpecifics>::iterator iter;
-      for (iter = tabs1.begin(); iter != tabs1.end(); ++iter) {
-        associator_->AssociateForeignSpecifics(*iter, base::Time());
-      }
+      entity.mutable_session()->CopyFrom(tabs1[i]);
+      initial_data.push_back(syncer::SyncData::CreateRemoteData(
+          i + 2,
+          entity,
+          base::Time(),
+          syncer::AttachmentIdList(),
+          syncer::AttachmentServiceProxyForTest::Create()));
     }
   }
 
-  if (!CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kDisableSyncSessionsV2)) {
-    ProfileSyncServiceFactory::GetForProfile(browser_->profile())->
-        GetSessionsSyncableService()->
-            MergeDataAndStartSyncing(syncer::SESSIONS, initial_data,
-        scoped_ptr<syncer::SyncChangeProcessor>(
-            new syncer::FakeSyncChangeProcessor()),
-        scoped_ptr<syncer::SyncErrorFactory>(
-            new syncer::SyncErrorFactoryMock()));
-  }
+  ProfileSyncServiceFactory::GetForProfile(browser_->profile())->
+      GetSessionsSyncableService()->
+          MergeDataAndStartSyncing(syncer::SESSIONS, initial_data,
+      scoped_ptr<syncer::SyncChangeProcessor>(
+          new syncer::FakeSyncChangeProcessor()),
+      scoped_ptr<syncer::SyncErrorFactory>(
+          new syncer::SyncErrorFactoryMock()));
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionSessionsTest, GetDevices) {
@@ -227,6 +244,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionSessionsTest, GetDevices) {
   for (size_t i = 0; i < devices->GetSize(); ++i) {
     EXPECT_TRUE(devices->GetDictionary(i, &device));
     EXPECT_EQ(kSessionTags[i], utils::GetString(device, "info"));
+    EXPECT_EQ(kSessionTags[i], utils::GetString(device, "deviceName"));
     EXPECT_TRUE(device->GetList("sessions", &sessions));
     EXPECT_EQ(0u, sessions->GetSize());
   }
@@ -248,6 +266,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionSessionsTest, GetDevicesMaxResults) {
   for (size_t i = 0; i < devices->GetSize(); ++i) {
     EXPECT_TRUE(devices->GetDictionary(i, &device));
     EXPECT_EQ(kSessionTags[i], utils::GetString(device, "info"));
+    EXPECT_EQ(kSessionTags[i], utils::GetString(device, "deviceName"));
     EXPECT_TRUE(device->GetList("sessions", &sessions));
     EXPECT_EQ(1u, sessions->GetSize());
   }
@@ -309,6 +328,27 @@ IN_PROC_BROWSER_TEST_F(ExtensionSessionsTest, RestoreForeignSessionInvalidId) {
       browser_), "Invalid session id: \"tag3.0\"."));
 }
 
+IN_PROC_BROWSER_TEST_F(ExtensionSessionsTest, RestoreInIncognito) {
+  CreateSessionModels();
+
+  EXPECT_TRUE(MatchPattern(utils::RunFunctionAndReturnError(
+      CreateFunction<SessionsRestoreFunction>(true).get(),
+      "[\"1\"]",
+      CreateIncognitoBrowser()),
+      "Can not restore sessions in incognito mode."));
+}
+
+IN_PROC_BROWSER_TEST_F(ExtensionSessionsTest, GetRecentlyClosedIncognito) {
+  scoped_ptr<base::ListValue> result(utils::ToList(
+      utils::RunFunctionAndReturnSingleResult(
+          CreateFunction<SessionsGetRecentlyClosedFunction>(true).get(),
+          "[]",
+          CreateIncognitoBrowser())));
+  ASSERT_TRUE(result);
+  base::ListValue* sessions = result.get();
+  EXPECT_EQ(0u, sessions->GetSize());
+}
+
 // Flaky on ChromeOS, times out on OSX Debug http://crbug.com/251199
 #if defined(OS_CHROMEOS) || (defined(OS_MACOSX) && !defined(NDEBUG))
 #define MAYBE_SessionsApis DISABLED_SessionsApis