blob: 649418a7750b714e23ca7d8778f548990e5f9a4c [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ios/chrome/browser/device_sharing/device_sharing_manager.h"
#include <memory>
#include "base/mac/foundation_util.h"
#import "components/handoff/handoff_manager.h"
#include "components/handoff/pref_names_ios.h"
#include "components/sync_preferences/testing_pref_service_syncable.h"
#include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
#include "ios/web/public/test/test_web_thread_bundle.h"
#include "testing/platform_test.h"
#import "third_party/ocmock/OCMock/OCMock.h"
#import "third_party/ocmock/gtest_support.h"
#include "url/gurl.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@interface TestDeviceSharingManager : DeviceSharingManager
+ (HandoffManager*)createHandoffManager;
@end
@implementation TestDeviceSharingManager
+ (HandoffManager*)createHandoffManager {
return [OCMockObject niceMockForClass:[HandoffManager class]];
}
@end
namespace {
class DeviceSharingManagerTest : public PlatformTest {
protected:
DeviceSharingManagerTest()
: PlatformTest(),
kTestURL1("http://test_sharing_1.html"),
kTestURL2("http://test_sharing_2.html") {}
void SetUp() override {
PlatformTest::SetUp();
TestChromeBrowserState::Builder mainBrowserStateBuilder;
chrome_browser_state_ = mainBrowserStateBuilder.Build();
sharing_manager_ = [[TestDeviceSharingManager alloc] init];
}
void TearDown() override {
[sharing_manager_ updateBrowserState:NULL];
sharing_manager_ = nil;
}
const GURL kTestURL1;
const GURL kTestURL2;
web::TestWebThreadBundle thread_bundle_;
std::unique_ptr<TestChromeBrowserState> chrome_browser_state_;
DeviceSharingManager* sharing_manager_;
};
TEST_F(DeviceSharingManagerTest, NoMainBrowserState) {
EXPECT_FALSE([sharing_manager_ handoffManager]);
// Updating the active URL should be a no-op.
[sharing_manager_ updateActiveURL:GURL("http://test")];
EXPECT_FALSE([sharing_manager_ handoffManager]);
}
TEST_F(DeviceSharingManagerTest, ShareOneUrl) {
[sharing_manager_ updateBrowserState:chrome_browser_state_.get()];
EXPECT_TRUE([sharing_manager_ handoffManager]);
OCMockObject* mock_handoff_manager =
(OCMockObject*)[sharing_manager_ handoffManager];
[[mock_handoff_manager expect] updateActiveURL:kTestURL1];
[sharing_manager_ updateActiveURL:kTestURL1];
EXPECT_OCMOCK_VERIFY(mock_handoff_manager);
}
TEST_F(DeviceSharingManagerTest, ShareTwoUrls) {
[sharing_manager_ updateBrowserState:chrome_browser_state_.get()];
EXPECT_TRUE([sharing_manager_ handoffManager]);
OCMockObject* mock_handoff_manager =
(OCMockObject*)[sharing_manager_ handoffManager];
[[mock_handoff_manager expect] updateActiveURL:kTestURL1];
[[mock_handoff_manager expect] updateActiveURL:kTestURL2];
[sharing_manager_ updateActiveURL:kTestURL1];
[sharing_manager_ updateActiveURL:kTestURL2];
EXPECT_OCMOCK_VERIFY(mock_handoff_manager);
}
TEST_F(DeviceSharingManagerTest, ResetMainBrowserStateAfterShare) {
[sharing_manager_ updateBrowserState:chrome_browser_state_.get()];
EXPECT_TRUE([sharing_manager_ handoffManager]);
OCMockObject* mock_handoff_manager =
(OCMockObject*)[sharing_manager_ handoffManager];
[[mock_handoff_manager expect] updateActiveURL:kTestURL1];
[sharing_manager_ updateActiveURL:kTestURL1];
EXPECT_OCMOCK_VERIFY(mock_handoff_manager);
[sharing_manager_ updateBrowserState:NULL];
EXPECT_FALSE([sharing_manager_ handoffManager]);
}
TEST_F(DeviceSharingManagerTest, DisableHandoffViaPrefs) {
[sharing_manager_ updateBrowserState:chrome_browser_state_.get()];
EXPECT_TRUE([sharing_manager_ handoffManager]);
sync_preferences::TestingPrefServiceSyncable* prefs =
chrome_browser_state_->GetTestingPrefService();
prefs->SetBoolean(prefs::kIosHandoffToOtherDevices, false);
EXPECT_FALSE([sharing_manager_ handoffManager]);
}
} // namespace