#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;
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();
};
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;
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());
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) {
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());
}
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());
}
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