Commit 419bd6b2 authored by Ayu Ishii's avatar Ayu Ishii Committed by Commit Bot

[sms] Refactor to not use BrowserMainLoop to retrieve SmsProvider

This changes the ownership of SmsProvider from BrowserMainLoop to
SmsFetcher. This infrastructure change that will help with
implementation of the autofill version of sms receiver.

Bug: 1026373
Change-Id: I0f50f90a3d4b7a72443b0a6639d7d12d25ffaeb0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1960068Reviewed-by: default avatarAlex Moshchuk <alexmos@chromium.org>
Reviewed-by: default avatarVictor Costan <pwnall@chromium.org>
Commit-Queue: Ayu Ishii <ayui@chromium.org>
Cr-Commit-Position: refs/heads/master@{#724063}
parent 8ebb7fbf
...@@ -87,7 +87,6 @@ ...@@ -87,7 +87,6 @@
#include "content/browser/scheduler/responsiveness/watcher.h" #include "content/browser/scheduler/responsiveness/watcher.h"
#include "content/browser/screenlock_monitor/screenlock_monitor.h" #include "content/browser/screenlock_monitor/screenlock_monitor.h"
#include "content/browser/screenlock_monitor/screenlock_monitor_device_source.h" #include "content/browser/screenlock_monitor/screenlock_monitor_device_source.h"
#include "content/browser/sms/sms_provider.h"
#include "content/browser/speech/speech_recognition_manager_impl.h" #include "content/browser/speech/speech_recognition_manager_impl.h"
#include "content/browser/startup_data_impl.h" #include "content/browser/startup_data_impl.h"
#include "content/browser/startup_task_runner.h" #include "content/browser/startup_task_runner.h"
...@@ -1613,16 +1612,4 @@ bool BrowserMainLoop::AudioServiceOutOfProcess() const { ...@@ -1613,16 +1612,4 @@ bool BrowserMainLoop::AudioServiceOutOfProcess() const {
!GetContentClient()->browser()->OverridesAudioManager(); !GetContentClient()->browser()->OverridesAudioManager();
} }
SmsProvider* BrowserMainLoop::GetSmsProvider() {
if (!sms_provider_) {
sms_provider_ = SmsProvider::Create();
}
return sms_provider_.get();
}
void BrowserMainLoop::SetSmsProviderForTesting(
std::unique_ptr<SmsProvider> provider) {
sms_provider_ = std::move(provider);
}
} // namespace content } // namespace content
...@@ -89,7 +89,6 @@ class MediaKeysListenerManagerImpl; ...@@ -89,7 +89,6 @@ class MediaKeysListenerManagerImpl;
class MediaStreamManager; class MediaStreamManager;
class SaveFileManager; class SaveFileManager;
class ScreenlockMonitor; class ScreenlockMonitor;
class SmsProvider;
class SpeechRecognitionManagerImpl; class SpeechRecognitionManagerImpl;
class StartupTaskRunner; class StartupTaskRunner;
class TracingControllerImpl; class TracingControllerImpl;
...@@ -225,9 +224,6 @@ class CONTENT_EXPORT BrowserMainLoop { ...@@ -225,9 +224,6 @@ class CONTENT_EXPORT BrowserMainLoop {
} }
#endif #endif
SmsProvider* GetSmsProvider();
void SetSmsProviderForTesting(std::unique_ptr<SmsProvider>);
BrowserMainParts* parts() { return parts_.get(); } BrowserMainParts* parts() { return parts_.get(); }
private: private:
...@@ -375,8 +371,6 @@ class CONTENT_EXPORT BrowserMainLoop { ...@@ -375,8 +371,6 @@ class CONTENT_EXPORT BrowserMainLoop {
// Must be deleted on the IO thread. // Must be deleted on the IO thread.
std::unique_ptr<SpeechRecognitionManagerImpl> speech_recognition_manager_; std::unique_ptr<SpeechRecognitionManagerImpl> speech_recognition_manager_;
std::unique_ptr<SmsProvider> sms_provider_;
#if defined(OS_WIN) #if defined(OS_WIN)
std::unique_ptr<media::SystemMessageWindowWin> system_message_window_; std::unique_ptr<media::SystemMessageWindowWin> system_message_window_;
#elif defined(OS_LINUX) && defined(USE_UDEV) #elif defined(OS_LINUX) && defined(USE_UDEV)
......
...@@ -24,11 +24,9 @@ ...@@ -24,11 +24,9 @@
#include "third_party/blink/public/common/sms/sms_receiver_outcome.h" #include "third_party/blink/public/common/sms/sms_receiver_outcome.h"
using ::testing::_; using ::testing::_;
using ::testing::ByMove;
using ::testing::Invoke; using ::testing::Invoke;
using ::testing::NiceMock; using ::testing::NiceMock;
using ::testing::Return; using ::testing::Return;
using ::testing::StrictMock;
namespace content { namespace content {
...@@ -113,8 +111,9 @@ class SmsBrowserTest : public ContentBrowserTest { ...@@ -113,8 +111,9 @@ class SmsBrowserTest : public ContentBrowserTest {
cert_verifier_.TearDownInProcessBrowserTestFixture(); cert_verifier_.TearDownInProcessBrowserTestFixture();
} }
SmsFetcher* GetSmsFetcher() { SmsFetcherImpl* GetSmsFetcher() {
return SmsFetcher::Get(shell()->web_contents()->GetBrowserContext()); return static_cast<SmsFetcherImpl*>(
SmsFetcher::Get(shell()->web_contents()->GetBrowserContext()));
} }
ukm::TestAutoSetUkmRecorder* ukm_recorder() { return ukm_recorder_.get(); } ukm::TestAutoSetUkmRecorder* ukm_recorder() { return ukm_recorder_.get(); }
...@@ -140,9 +139,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Receive) { ...@@ -140,9 +139,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Receive) {
ExpectSmsPrompt(); ExpectSmsPrompt();
auto* provider = new NiceMock<MockSmsProvider>(); auto provider = std::make_unique<MockSmsProvider>();
BrowserMainLoop::GetInstance()->SetSmsProviderForTesting( MockSmsProvider* mock_provider_ptr = provider.get();
base::WrapUnique(provider)); GetSmsFetcher()->SetSmsProviderForTesting(std::move(provider));
// Test that SMS content can be retrieved after navigator.sms.receive(). // Test that SMS content can be retrieved after navigator.sms.receive().
std::string script = R"( std::string script = R"(
...@@ -152,8 +151,8 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Receive) { ...@@ -152,8 +151,8 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Receive) {
}) (); }) ();
)"; )";
EXPECT_CALL(*provider, Retrieve()).WillOnce(Invoke([&]() { EXPECT_CALL(*mock_provider_ptr, Retrieve()).WillOnce(Invoke([&]() {
provider->NotifyReceive(url::Origin::Create(url), "", "hello"); mock_provider_ptr->NotifyReceive(url::Origin::Create(url), "", "hello");
ConfirmPrompt(); ConfirmPrompt();
})); }));
...@@ -180,9 +179,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOrigin) { ...@@ -180,9 +179,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOrigin) {
ExpectSmsPrompt(); ExpectSmsPrompt();
auto* provider = new NiceMock<MockSmsProvider>(); auto provider = std::make_unique<MockSmsProvider>();
BrowserMainLoop::GetInstance()->SetSmsProviderForTesting( MockSmsProvider* mock_provider_ptr = provider.get();
base::WrapUnique(provider)); GetSmsFetcher()->SetSmsProviderForTesting(std::move(provider));
std::string script = R"( std::string script = R"(
(async () => { (async () => {
...@@ -196,10 +195,12 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOrigin) { ...@@ -196,10 +195,12 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOrigin) {
}) (); }) ();
)"; )";
EXPECT_CALL(*provider, Retrieve()).WillOnce(Return()).WillOnce(Invoke([&]() { EXPECT_CALL(*mock_provider_ptr, Retrieve())
provider->NotifyReceive(url::Origin::Create(url), "", "hello"); .WillOnce(Return())
ConfirmPrompt(); .WillOnce(Invoke([&]() {
})); mock_provider_ptr->NotifyReceive(url::Origin::Create(url), "", "hello");
ConfirmPrompt();
}));
// Wait for UKM to be recorded to avoid race condition between outcome // Wait for UKM to be recorded to avoid race condition between outcome
// capture and evaluation. // capture and evaluation.
...@@ -217,9 +218,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOrigin) { ...@@ -217,9 +218,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOrigin) {
} }
IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOriginPerTab) { IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOriginPerTab) {
auto* provider = new NiceMock<MockSmsProvider>(); auto provider = std::make_unique<MockSmsProvider>();
BrowserMainLoop::GetInstance()->SetSmsProviderForTesting( MockSmsProvider* mock_provider_ptr = provider.get();
base::WrapUnique(provider)); GetSmsFetcher()->SetSmsProviderForTesting(std::move(provider));
Shell* tab1 = CreateBrowser(); Shell* tab1 = CreateBrowser();
Shell* tab2 = CreateBrowser(); Shell* tab2 = CreateBrowser();
...@@ -232,7 +233,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOriginPerTab) { ...@@ -232,7 +233,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOriginPerTab) {
tab1->web_contents()->SetDelegate(&delegate_); tab1->web_contents()->SetDelegate(&delegate_);
tab2->web_contents()->SetDelegate(&delegate_); tab2->web_contents()->SetDelegate(&delegate_);
EXPECT_CALL(*provider, Retrieve()).Times(3); EXPECT_CALL(*mock_provider_ptr, Retrieve()).Times(3);
// Make 1 request on tab1 that is expected to be cancelled when the 2nd // Make 1 request on tab1 that is expected to be cancelled when the 2nd
// request is made. // request is made.
...@@ -271,7 +272,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOriginPerTab) { ...@@ -271,7 +272,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOriginPerTab) {
ukm_recorder()->SetOnAddEntryCallback(Entry::kEntryName, ukm_recorder()->SetOnAddEntryCallback(Entry::kEntryName,
ukm_loop.QuitClosure()); ukm_loop.QuitClosure());
provider->NotifyReceive(url::Origin::Create(url), "", "hello1"); mock_provider_ptr->NotifyReceive(url::Origin::Create(url), "", "hello1");
ConfirmPrompt(); ConfirmPrompt();
ukm_loop.Run(); ukm_loop.Run();
...@@ -295,7 +296,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOriginPerTab) { ...@@ -295,7 +296,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AtMostOneSmsRequestPerOriginPerTab) {
ukm_recorder()->SetOnAddEntryCallback(Entry::kEntryName, ukm_recorder()->SetOnAddEntryCallback(Entry::kEntryName,
ukm_loop.QuitClosure()); ukm_loop.QuitClosure());
provider->NotifyReceive(url::Origin::Create(url), "", "hello2"); mock_provider_ptr->NotifyReceive(url::Origin::Create(url), "", "hello2");
ConfirmPrompt(); ConfirmPrompt();
ukm_loop.Run(); ukm_loop.Run();
...@@ -312,9 +313,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Reload) { ...@@ -312,9 +313,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Reload) {
GURL url = GetTestUrl(nullptr, "simple_page.html"); GURL url = GetTestUrl(nullptr, "simple_page.html");
EXPECT_TRUE(NavigateToURL(shell(), url)); EXPECT_TRUE(NavigateToURL(shell(), url));
auto* provider = new NiceMock<MockSmsProvider>(); auto provider = std::make_unique<MockSmsProvider>();
BrowserMainLoop::GetInstance()->SetSmsProviderForTesting( MockSmsProvider* mock_provider_ptr = provider.get();
base::WrapUnique(provider)); GetSmsFetcher()->SetSmsProviderForTesting(std::move(provider));
std::string script = R"( std::string script = R"(
// kicks off the sms receiver, adding the service // kicks off the sms receiver, adding the service
...@@ -324,7 +325,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Reload) { ...@@ -324,7 +325,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Reload) {
base::RunLoop loop; base::RunLoop loop;
EXPECT_CALL(*provider, Retrieve()).WillOnce(Invoke([&loop]() { EXPECT_CALL(*mock_provider_ptr, Retrieve()).WillOnce(Invoke([&loop]() {
// Deliberately avoid calling NotifyReceive() to simulate // Deliberately avoid calling NotifyReceive() to simulate
// a request that has been received but not fulfilled. // a request that has been received but not fulfilled.
loop.Quit(); loop.Quit();
...@@ -356,13 +357,13 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Close) { ...@@ -356,13 +357,13 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Close) {
GURL url = GetTestUrl(nullptr, "simple_page.html"); GURL url = GetTestUrl(nullptr, "simple_page.html");
EXPECT_TRUE(NavigateToURL(shell(), url)); EXPECT_TRUE(NavigateToURL(shell(), url));
auto* provider = new NiceMock<MockSmsProvider>(); auto provider = std::make_unique<MockSmsProvider>();
BrowserMainLoop::GetInstance()->SetSmsProviderForTesting( MockSmsProvider* mock_provider_ptr = provider.get();
base::WrapUnique(provider)); GetSmsFetcher()->SetSmsProviderForTesting(std::move(provider));
base::RunLoop loop; base::RunLoop loop;
EXPECT_CALL(*provider, Retrieve()).WillOnce(Invoke([&loop]() { EXPECT_CALL(*mock_provider_ptr, Retrieve()).WillOnce(Invoke([&loop]() {
loop.Quit(); loop.Quit();
})); }));
...@@ -370,7 +371,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Close) { ...@@ -370,7 +371,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Close) {
loop.Run(); loop.Run();
ASSERT_TRUE(provider->HasObservers()); ASSERT_TRUE(mock_provider_ptr->HasObservers());
auto* fetcher = GetSmsFetcher(); auto* fetcher = GetSmsFetcher();
...@@ -382,9 +383,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Close) { ...@@ -382,9 +383,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Close) {
} }
IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) { IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) {
auto* provider = new NiceMock<MockSmsProvider>(); auto provider = std::make_unique<MockSmsProvider>();
BrowserMainLoop::GetInstance()->SetSmsProviderForTesting( MockSmsProvider* mock_provider_ptr = provider.get();
base::WrapUnique(provider)); GetSmsFetcher()->SetSmsProviderForTesting(std::move(provider));
Shell* tab1 = CreateBrowser(); Shell* tab1 = CreateBrowser();
Shell* tab2 = CreateBrowser(); Shell* tab2 = CreateBrowser();
...@@ -397,7 +398,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) { ...@@ -397,7 +398,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) {
tab1->web_contents()->SetDelegate(&delegate_); tab1->web_contents()->SetDelegate(&delegate_);
tab2->web_contents()->SetDelegate(&delegate_); tab2->web_contents()->SetDelegate(&delegate_);
EXPECT_CALL(*provider, Retrieve()).Times(2); EXPECT_CALL(*mock_provider_ptr, Retrieve()).Times(2);
std::string script = R"( std::string script = R"(
var sms = navigator.sms.receive().then(({content}) => { var sms = navigator.sms.receive().then(({content}) => {
...@@ -411,7 +412,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) { ...@@ -411,7 +412,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) {
// Second tab registers an observer. // Second tab registers an observer.
EXPECT_TRUE(ExecJs(tab2, script)); EXPECT_TRUE(ExecJs(tab2, script));
ASSERT_TRUE(provider->HasObservers()); ASSERT_TRUE(mock_provider_ptr->HasObservers());
{ {
base::RunLoop ukm_loop; base::RunLoop ukm_loop;
...@@ -423,7 +424,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) { ...@@ -423,7 +424,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) {
ukm_recorder()->SetOnAddEntryCallback(Entry::kEntryName, ukm_recorder()->SetOnAddEntryCallback(Entry::kEntryName,
ukm_loop.QuitClosure()); ukm_loop.QuitClosure());
provider->NotifyReceive(url::Origin::Create(url), "", "hello1"); mock_provider_ptr->NotifyReceive(url::Origin::Create(url), "", "hello1");
ConfirmPrompt(); ConfirmPrompt();
ukm_loop.Run(); ukm_loop.Run();
...@@ -431,7 +432,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) { ...@@ -431,7 +432,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) {
EXPECT_EQ("hello1", EvalJs(tab1, "sms")); EXPECT_EQ("hello1", EvalJs(tab1, "sms"));
ASSERT_TRUE(provider->HasObservers()); ASSERT_TRUE(mock_provider_ptr->HasObservers());
ExpectOutcomeUKM(url, blink::SMSReceiverOutcome::kSuccess); ExpectOutcomeUKM(url, blink::SMSReceiverOutcome::kSuccess);
...@@ -447,7 +448,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) { ...@@ -447,7 +448,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) {
ukm_recorder()->SetOnAddEntryCallback(Entry::kEntryName, ukm_recorder()->SetOnAddEntryCallback(Entry::kEntryName,
ukm_loop.QuitClosure()); ukm_loop.QuitClosure());
provider->NotifyReceive(url::Origin::Create(url), "", "hello2"); mock_provider_ptr->NotifyReceive(url::Origin::Create(url), "", "hello2");
ConfirmPrompt(); ConfirmPrompt();
ukm_loop.Run(); ukm_loop.Run();
...@@ -461,9 +462,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) { ...@@ -461,9 +462,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsSameOrigin) {
} }
IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsDifferentOrigin) { IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsDifferentOrigin) {
auto* provider = new NiceMock<MockSmsProvider>(); auto provider = std::make_unique<MockSmsProvider>();
BrowserMainLoop::GetInstance()->SetSmsProviderForTesting( MockSmsProvider* mock_provider_ptr = provider.get();
base::WrapUnique(provider)); GetSmsFetcher()->SetSmsProviderForTesting(std::move(provider));
Shell* tab1 = CreateBrowser(); Shell* tab1 = CreateBrowser();
Shell* tab2 = CreateBrowser(); Shell* tab2 = CreateBrowser();
...@@ -486,7 +487,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsDifferentOrigin) { ...@@ -486,7 +487,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsDifferentOrigin) {
base::RunLoop loop; base::RunLoop loop;
EXPECT_CALL(*provider, Retrieve()).Times(2); EXPECT_CALL(*mock_provider_ptr, Retrieve()).Times(2);
tab1->web_contents()->SetDelegate(&delegate_); tab1->web_contents()->SetDelegate(&delegate_);
tab2->web_contents()->SetDelegate(&delegate_); tab2->web_contents()->SetDelegate(&delegate_);
...@@ -494,7 +495,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsDifferentOrigin) { ...@@ -494,7 +495,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsDifferentOrigin) {
EXPECT_TRUE(ExecJs(tab1, script)); EXPECT_TRUE(ExecJs(tab1, script));
EXPECT_TRUE(ExecJs(tab2, script)); EXPECT_TRUE(ExecJs(tab2, script));
ASSERT_TRUE(provider->HasObservers()); ASSERT_TRUE(mock_provider_ptr->HasObservers());
{ {
base::RunLoop ukm_loop; base::RunLoop ukm_loop;
...@@ -503,14 +504,14 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsDifferentOrigin) { ...@@ -503,14 +504,14 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsDifferentOrigin) {
// capture and evaluation. // capture and evaluation.
ukm_recorder()->SetOnAddEntryCallback(Entry::kEntryName, ukm_recorder()->SetOnAddEntryCallback(Entry::kEntryName,
ukm_loop.QuitClosure()); ukm_loop.QuitClosure());
provider->NotifyReceive(url::Origin::Create(url1), "", "hello1"); mock_provider_ptr->NotifyReceive(url::Origin::Create(url1), "", "hello1");
ConfirmPrompt(); ConfirmPrompt();
ukm_loop.Run(); ukm_loop.Run();
} }
EXPECT_EQ("hello1", EvalJs(tab1, "sms")); EXPECT_EQ("hello1", EvalJs(tab1, "sms"));
ASSERT_TRUE(provider->HasObservers()); ASSERT_TRUE(mock_provider_ptr->HasObservers());
{ {
base::RunLoop ukm_loop; base::RunLoop ukm_loop;
...@@ -519,7 +520,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsDifferentOrigin) { ...@@ -519,7 +520,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, TwoTabsDifferentOrigin) {
// capture and evaluation. // capture and evaluation.
ukm_recorder()->SetOnAddEntryCallback(Entry::kEntryName, ukm_recorder()->SetOnAddEntryCallback(Entry::kEntryName,
ukm_loop.QuitClosure()); ukm_loop.QuitClosure());
provider->NotifyReceive(url::Origin::Create(url2), "", "hello2"); mock_provider_ptr->NotifyReceive(url::Origin::Create(url2), "", "hello2");
ConfirmPrompt(); ConfirmPrompt();
ukm_loop.Run(); ukm_loop.Run();
} }
...@@ -536,13 +537,13 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, SmsReceivedAfterTabIsClosed) { ...@@ -536,13 +537,13 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, SmsReceivedAfterTabIsClosed) {
GURL url = GetTestUrl(nullptr, "simple_page.html"); GURL url = GetTestUrl(nullptr, "simple_page.html");
EXPECT_TRUE(NavigateToURL(shell(), url)); EXPECT_TRUE(NavigateToURL(shell(), url));
auto* provider = new NiceMock<MockSmsProvider>(); auto provider = std::make_unique<MockSmsProvider>();
BrowserMainLoop::GetInstance()->SetSmsProviderForTesting( MockSmsProvider* mock_provider_ptr = provider.get();
base::WrapUnique(provider)); GetSmsFetcher()->SetSmsProviderForTesting(std::move(provider));
base::RunLoop loop; base::RunLoop loop;
EXPECT_CALL(*provider, Retrieve()).WillOnce(Invoke([&loop]() { EXPECT_CALL(*mock_provider_ptr, Retrieve()).WillOnce(Invoke([&loop]() {
loop.Quit(); loop.Quit();
})); }));
...@@ -555,7 +556,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, SmsReceivedAfterTabIsClosed) { ...@@ -555,7 +556,7 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, SmsReceivedAfterTabIsClosed) {
shell()->Close(); shell()->Close();
provider->NotifyReceive(url::Origin::Create(url), "", "hello"); mock_provider_ptr->NotifyReceive(url::Origin::Create(url), "", "hello");
ExpectNoOutcomeUKM(); ExpectNoOutcomeUKM();
} }
...@@ -564,9 +565,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Cancels) { ...@@ -564,9 +565,9 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Cancels) {
GURL url = GetTestUrl(nullptr, "simple_page.html"); GURL url = GetTestUrl(nullptr, "simple_page.html");
EXPECT_TRUE(NavigateToURL(shell(), url)); EXPECT_TRUE(NavigateToURL(shell(), url));
auto* provider = new NiceMock<MockSmsProvider>(); auto provider = std::make_unique<MockSmsProvider>();
BrowserMainLoop::GetInstance()->SetSmsProviderForTesting( MockSmsProvider* mock_provider_ptr = provider.get();
base::WrapUnique(provider)); GetSmsFetcher()->SetSmsProviderForTesting(std::move(provider));
shell()->web_contents()->SetDelegate(&delegate_); shell()->web_contents()->SetDelegate(&delegate_);
...@@ -574,8 +575,8 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Cancels) { ...@@ -574,8 +575,8 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, Cancels) {
ExpectSmsPrompt(); ExpectSmsPrompt();
EXPECT_CALL(*provider, Retrieve()).WillOnce(Invoke([&]() { EXPECT_CALL(*mock_provider_ptr, Retrieve()).WillOnce(Invoke([&]() {
provider->NotifyReceive(url::Origin::Create(url), "", "hello"); mock_provider_ptr->NotifyReceive(url::Origin::Create(url), "", "hello");
DismissPrompt(); DismissPrompt();
})); }));
...@@ -601,17 +602,18 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AbortAfterSmsRetrieval) { ...@@ -601,17 +602,18 @@ IN_PROC_BROWSER_TEST_F(SmsBrowserTest, AbortAfterSmsRetrieval) {
GURL url = GetTestUrl(nullptr, "simple_page.html"); GURL url = GetTestUrl(nullptr, "simple_page.html");
EXPECT_TRUE(NavigateToURL(shell(), url)); EXPECT_TRUE(NavigateToURL(shell(), url));
auto* provider = new NiceMock<MockSmsProvider>(); auto provider = std::make_unique<MockSmsProvider>();
BrowserMainLoop::GetInstance()->SetSmsProviderForTesting( MockSmsProvider* mock_provider_ptr = provider.get();
base::WrapUnique(provider)); GetSmsFetcher()->SetSmsProviderForTesting(std::move(provider));
shell()->web_contents()->SetDelegate(&delegate_); shell()->web_contents()->SetDelegate(&delegate_);
ExpectSmsPrompt(); ExpectSmsPrompt();
EXPECT_CALL(*provider, Retrieve()).WillOnce(Invoke([&provider, &url]() { EXPECT_CALL(*mock_provider_ptr, Retrieve())
provider->NotifyReceive(url::Origin::Create(url), "", "hello"); .WillOnce(Invoke([&mock_provider_ptr, &url]() {
})); mock_provider_ptr->NotifyReceive(url::Origin::Create(url), "", "hello");
}));
EXPECT_TRUE(ExecJs(shell(), R"( EXPECT_TRUE(ExecJs(shell(), R"(
var controller = new AbortController(); var controller = new AbortController();
......
...@@ -16,8 +16,9 @@ namespace content { ...@@ -16,8 +16,9 @@ namespace content {
const char kSmsFetcherImplKeyName[] = "sms_fetcher"; const char kSmsFetcherImplKeyName[] = "sms_fetcher";
SmsFetcherImpl::SmsFetcherImpl(BrowserContext* context, SmsProvider* provider) SmsFetcherImpl::SmsFetcherImpl(BrowserContext* context,
: context_(context), provider_(provider) { std::unique_ptr<SmsProvider> provider)
: context_(context), provider_(std::move(provider)) {
if (provider_) if (provider_)
provider_->AddObserver(this); provider_->AddObserver(this);
} }
...@@ -30,8 +31,8 @@ SmsFetcherImpl::~SmsFetcherImpl() { ...@@ -30,8 +31,8 @@ SmsFetcherImpl::~SmsFetcherImpl() {
// static // static
SmsFetcher* SmsFetcher::Get(BrowserContext* context) { SmsFetcher* SmsFetcher::Get(BrowserContext* context) {
if (!context->GetUserData(kSmsFetcherImplKeyName)) { if (!context->GetUserData(kSmsFetcherImplKeyName)) {
auto fetcher = std::make_unique<SmsFetcherImpl>( auto fetcher =
context, BrowserMainLoop::GetInstance()->GetSmsProvider()); std::make_unique<SmsFetcherImpl>(context, SmsProvider::Create());
context->SetUserData(kSmsFetcherImplKeyName, std::move(fetcher)); context->SetUserData(kSmsFetcherImplKeyName, std::move(fetcher));
} }
...@@ -41,6 +42,7 @@ SmsFetcher* SmsFetcher::Get(BrowserContext* context) { ...@@ -41,6 +42,7 @@ SmsFetcher* SmsFetcher::Get(BrowserContext* context) {
void SmsFetcherImpl::Subscribe(const url::Origin& origin, void SmsFetcherImpl::Subscribe(const url::Origin& origin,
SmsQueue::Subscriber* subscriber) { SmsQueue::Subscriber* subscriber) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
subscribers_.Push(origin, subscriber); subscribers_.Push(origin, subscriber);
// Fetches a remote SMS. // Fetches a remote SMS.
...@@ -56,12 +58,14 @@ void SmsFetcherImpl::Subscribe(const url::Origin& origin, ...@@ -56,12 +58,14 @@ void SmsFetcherImpl::Subscribe(const url::Origin& origin,
void SmsFetcherImpl::Unsubscribe(const url::Origin& origin, void SmsFetcherImpl::Unsubscribe(const url::Origin& origin,
SmsQueue::Subscriber* subscriber) { SmsQueue::Subscriber* subscriber) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
subscribers_.Remove(origin, subscriber); subscribers_.Remove(origin, subscriber);
} }
bool SmsFetcherImpl::Notify(const url::Origin& origin, bool SmsFetcherImpl::Notify(const url::Origin& origin,
const std::string& one_time_code, const std::string& one_time_code,
const std::string& sms) { const std::string& sms) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
auto* subscriber = subscribers_.Pop(origin); auto* subscriber = subscribers_.Pop(origin);
if (!subscriber) if (!subscriber)
...@@ -73,6 +77,8 @@ bool SmsFetcherImpl::Notify(const url::Origin& origin, ...@@ -73,6 +77,8 @@ bool SmsFetcherImpl::Notify(const url::Origin& origin,
} }
void SmsFetcherImpl::OnRemote(base::Optional<std::string> sms) { void SmsFetcherImpl::OnRemote(base::Optional<std::string> sms) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (!sms) if (!sms)
return; return;
...@@ -86,11 +92,20 @@ void SmsFetcherImpl::OnRemote(base::Optional<std::string> sms) { ...@@ -86,11 +92,20 @@ void SmsFetcherImpl::OnRemote(base::Optional<std::string> sms) {
bool SmsFetcherImpl::OnReceive(const url::Origin& origin, bool SmsFetcherImpl::OnReceive(const url::Origin& origin,
const std::string& one_time_code, const std::string& one_time_code,
const std::string& sms) { const std::string& sms) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return Notify(origin, one_time_code, sms); return Notify(origin, one_time_code, sms);
} }
bool SmsFetcherImpl::HasSubscribers() { bool SmsFetcherImpl::HasSubscribers() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return subscribers_.HasSubscribers(); return subscribers_.HasSubscribers();
} }
void SmsFetcherImpl::SetSmsProviderForTesting(
std::unique_ptr<SmsProvider> provider) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
provider_ = std::move(provider);
provider_->AddObserver(this);
}
} // namespace content } // namespace content
...@@ -5,7 +5,10 @@ ...@@ -5,7 +5,10 @@
#ifndef CONTENT_BROWSER_SMS_SMS_FETCHER_IMPL_H_ #ifndef CONTENT_BROWSER_SMS_SMS_FETCHER_IMPL_H_
#define CONTENT_BROWSER_SMS_SMS_FETCHER_IMPL_H_ #define CONTENT_BROWSER_SMS_SMS_FETCHER_IMPL_H_
#include <memory>
#include "base/optional.h" #include "base/optional.h"
#include "base/sequence_checker.h"
#include "base/supports_user_data.h" #include "base/supports_user_data.h"
#include "content/browser/sms/sms_provider.h" #include "content/browser/sms/sms_provider.h"
#include "content/browser/sms/sms_queue.h" #include "content/browser/sms/sms_queue.h"
...@@ -22,26 +25,30 @@ class BrowserContext; ...@@ -22,26 +25,30 @@ class BrowserContext;
class SmsProvider; class SmsProvider;
// SmsFetcherImpls coordinate between local and remote SMS providers as well as // SmsFetcherImpls coordinate between local and remote SMS providers as well as
// between multiple origins. There is one SmsFetcherImpl per profile. // between multiple origins. There is one SmsFetcherImpl per profile. An
// instance must only be used on the sequence it was created on.
class CONTENT_EXPORT SmsFetcherImpl : public content::SmsFetcher, class CONTENT_EXPORT SmsFetcherImpl : public content::SmsFetcher,
public base::SupportsUserData::Data, public base::SupportsUserData::Data,
public SmsProvider::Observer { public SmsProvider::Observer {
public: public:
SmsFetcherImpl(BrowserContext*, SmsProvider*); SmsFetcherImpl(BrowserContext* context,
std::unique_ptr<SmsProvider> provider);
~SmsFetcherImpl() override; ~SmsFetcherImpl() override;
static SmsFetcher* Get(BrowserContext*); static SmsFetcher* Get(BrowserContext* context);
void Subscribe(const url::Origin& origin, Subscriber* subscriber) override; void Subscribe(const url::Origin& origin, Subscriber* subscriber) override;
void Unsubscribe(const url::Origin& origin, Subscriber* subscriber) override; void Unsubscribe(const url::Origin& origin, Subscriber* subscriber) override;
// content::SmsProvider::Observer: // content::SmsProvider::Observer:
bool OnReceive(const url::Origin&, bool OnReceive(const url::Origin& origin,
const std::string& one_time_code, const std::string& one_time_code,
const std::string& sms) override; const std::string& sms) override;
bool HasSubscribers() override; bool HasSubscribers() override;
void SetSmsProviderForTesting(std::unique_ptr<SmsProvider> provider);
private: private:
void OnRemote(base::Optional<std::string> sms); void OnRemote(base::Optional<std::string> sms);
...@@ -53,12 +60,12 @@ class CONTENT_EXPORT SmsFetcherImpl : public content::SmsFetcher, ...@@ -53,12 +60,12 @@ class CONTENT_EXPORT SmsFetcherImpl : public content::SmsFetcher,
// the BrowserContext itself. // the BrowserContext itself.
BrowserContext* context_; BrowserContext* context_;
// |provider_| is safe because all instances of SmsProvider are owned std::unique_ptr<SmsProvider> provider_;
// by the BrowserMainLoop, which outlive instances of this class.
SmsProvider* provider_;
SmsQueue subscribers_; SmsQueue subscribers_;
SEQUENCE_CHECKER(sequence_checker_);
base::WeakPtrFactory<SmsFetcherImpl> weak_ptr_factory_{this}; base::WeakPtrFactory<SmsFetcherImpl> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(SmsFetcherImpl); DISALLOW_COPY_AND_ASSIGN(SmsFetcherImpl);
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
using ::testing::_; using ::testing::_;
using ::testing::Invoke; using ::testing::Invoke;
using ::testing::NiceMock; using ::testing::NiceMock;
using ::testing::Return;
using ::testing::StrictMock; using ::testing::StrictMock;
namespace content { namespace content {
...@@ -57,6 +56,7 @@ class SmsFetcherImplTest : public testing::Test { ...@@ -57,6 +56,7 @@ class SmsFetcherImplTest : public testing::Test {
void SetUp() override { void SetUp() override {
original_client_ = SetBrowserClientForTesting(&client_); original_client_ = SetBrowserClientForTesting(&client_);
provider_ = new NiceMock<MockSmsProvider>();
} }
void TearDown() override { void TearDown() override {
...@@ -66,12 +66,12 @@ class SmsFetcherImplTest : public testing::Test { ...@@ -66,12 +66,12 @@ class SmsFetcherImplTest : public testing::Test {
protected: protected:
MockContentBrowserClient* client() { return &client_; } MockContentBrowserClient* client() { return &client_; }
MockSmsProvider* provider() { return &provider_; } MockSmsProvider* provider() { return provider_; }
private: private:
ContentBrowserClient* original_client_ = nullptr; ContentBrowserClient* original_client_ = nullptr;
NiceMock<MockContentBrowserClient> client_; NiceMock<MockContentBrowserClient> client_;
NiceMock<MockSmsProvider> provider_; NiceMock<MockSmsProvider>* provider_;
DISALLOW_COPY_AND_ASSIGN(SmsFetcherImplTest); DISALLOW_COPY_AND_ASSIGN(SmsFetcherImplTest);
}; };
...@@ -80,7 +80,7 @@ class SmsFetcherImplTest : public testing::Test { ...@@ -80,7 +80,7 @@ class SmsFetcherImplTest : public testing::Test {
TEST_F(SmsFetcherImplTest, ReceiveFromLocalSmsProvider) { TEST_F(SmsFetcherImplTest, ReceiveFromLocalSmsProvider) {
StrictMock<MockSubscriber> subscriber; StrictMock<MockSubscriber> subscriber;
SmsFetcherImpl fetcher(nullptr, provider()); SmsFetcherImpl fetcher(nullptr, base::WrapUnique(provider()));
EXPECT_CALL(*provider(), Retrieve()).WillOnce(Invoke([&]() { EXPECT_CALL(*provider(), Retrieve()).WillOnce(Invoke([&]() {
provider()->NotifyReceive(kTestOrigin, "123", "hello"); provider()->NotifyReceive(kTestOrigin, "123", "hello");
...@@ -93,7 +93,7 @@ TEST_F(SmsFetcherImplTest, ReceiveFromLocalSmsProvider) { ...@@ -93,7 +93,7 @@ TEST_F(SmsFetcherImplTest, ReceiveFromLocalSmsProvider) {
TEST_F(SmsFetcherImplTest, ReceiveFromRemoteProvider) { TEST_F(SmsFetcherImplTest, ReceiveFromRemoteProvider) {
StrictMock<MockSubscriber> subscriber; StrictMock<MockSubscriber> subscriber;
SmsFetcherImpl fetcher(nullptr, provider()); SmsFetcherImpl fetcher(nullptr, base::WrapUnique(provider()));
const std::string& sms = "For: https://a.com?otp=123"; const std::string& sms = "For: https://a.com?otp=123";
...@@ -111,7 +111,7 @@ TEST_F(SmsFetcherImplTest, ReceiveFromRemoteProvider) { ...@@ -111,7 +111,7 @@ TEST_F(SmsFetcherImplTest, ReceiveFromRemoteProvider) {
TEST_F(SmsFetcherImplTest, RemoteProviderTimesOut) { TEST_F(SmsFetcherImplTest, RemoteProviderTimesOut) {
StrictMock<MockSubscriber> subscriber; StrictMock<MockSubscriber> subscriber;
SmsFetcherImpl fetcher(nullptr, provider()); SmsFetcherImpl fetcher(nullptr, base::WrapUnique(provider()));
EXPECT_CALL(*client(), FetchRemoteSms(_, _, _)) EXPECT_CALL(*client(), FetchRemoteSms(_, _, _))
.WillOnce(Invoke( .WillOnce(Invoke(
...@@ -129,7 +129,7 @@ TEST_F(SmsFetcherImplTest, ReceiveFromOtherOrigin) { ...@@ -129,7 +129,7 @@ TEST_F(SmsFetcherImplTest, ReceiveFromOtherOrigin) {
StrictMock<MockSubscriber> subscriber; StrictMock<MockSubscriber> subscriber;
const url::Origin origin = url::Origin::Create(GURL("https://a.com")); const url::Origin origin = url::Origin::Create(GURL("https://a.com"));
SmsFetcherImpl fetcher(nullptr, provider()); SmsFetcherImpl fetcher(nullptr, base::WrapUnique(provider()));
EXPECT_CALL(*client(), FetchRemoteSms(_, _, _)) EXPECT_CALL(*client(), FetchRemoteSms(_, _, _))
.WillOnce(Invoke( .WillOnce(Invoke(
...@@ -145,7 +145,7 @@ TEST_F(SmsFetcherImplTest, ReceiveFromOtherOrigin) { ...@@ -145,7 +145,7 @@ TEST_F(SmsFetcherImplTest, ReceiveFromOtherOrigin) {
TEST_F(SmsFetcherImplTest, ReceiveFromBothProviders) { TEST_F(SmsFetcherImplTest, ReceiveFromBothProviders) {
StrictMock<MockSubscriber> subscriber; StrictMock<MockSubscriber> subscriber;
SmsFetcherImpl fetcher(nullptr, provider()); SmsFetcherImpl fetcher(nullptr, base::WrapUnique(provider()));
const std::string& sms = "hello \nFor: https://a.com?otp=123"; const std::string& sms = "hello \nFor: https://a.com?otp=123";
...@@ -170,7 +170,7 @@ TEST_F(SmsFetcherImplTest, OneOriginTwoSubscribers) { ...@@ -170,7 +170,7 @@ TEST_F(SmsFetcherImplTest, OneOriginTwoSubscribers) {
StrictMock<MockSubscriber> subscriber1; StrictMock<MockSubscriber> subscriber1;
StrictMock<MockSubscriber> subscriber2; StrictMock<MockSubscriber> subscriber2;
SmsFetcherImpl fetcher(nullptr, provider()); SmsFetcherImpl fetcher(nullptr, base::WrapUnique(provider()));
fetcher.Subscribe(kTestOrigin, &subscriber1); fetcher.Subscribe(kTestOrigin, &subscriber1);
fetcher.Subscribe(kTestOrigin, &subscriber2); fetcher.Subscribe(kTestOrigin, &subscriber2);
...@@ -189,7 +189,7 @@ TEST_F(SmsFetcherImplTest, TwoOriginsTwoSubscribers) { ...@@ -189,7 +189,7 @@ TEST_F(SmsFetcherImplTest, TwoOriginsTwoSubscribers) {
const url::Origin origin1 = url::Origin::Create(GURL("https://a.com")); const url::Origin origin1 = url::Origin::Create(GURL("https://a.com"));
const url::Origin origin2 = url::Origin::Create(GURL("https://b.com")); const url::Origin origin2 = url::Origin::Create(GURL("https://b.com"));
SmsFetcherImpl fetcher(nullptr, provider()); SmsFetcherImpl fetcher(nullptr, base::WrapUnique(provider()));
fetcher.Subscribe(origin1, &subscriber1); fetcher.Subscribe(origin1, &subscriber1);
fetcher.Subscribe(origin2, &subscriber2); fetcher.Subscribe(origin2, &subscriber2);
...@@ -200,4 +200,4 @@ TEST_F(SmsFetcherImplTest, TwoOriginsTwoSubscribers) { ...@@ -200,4 +200,4 @@ TEST_F(SmsFetcherImplTest, TwoOriginsTwoSubscribers) {
provider()->NotifyReceive(origin1, "123", "foo"); provider()->NotifyReceive(origin1, "123", "foo");
} }
} // namespace content } // namespace content
\ No newline at end of file
...@@ -42,11 +42,9 @@ using blink::mojom::SmsReceiver; ...@@ -42,11 +42,9 @@ using blink::mojom::SmsReceiver;
using blink::mojom::SmsStatus; using blink::mojom::SmsStatus;
using std::string; using std::string;
using ::testing::_; using ::testing::_;
using ::testing::ByMove;
using ::testing::Invoke; using ::testing::Invoke;
using ::testing::NiceMock; using ::testing::NiceMock;
using ::testing::Return; using ::testing::Return;
using ::testing::StrictMock;
using url::Origin; using url::Origin;
namespace content { namespace content {
...@@ -65,13 +63,17 @@ const char kTestUrl[] = "https://www.google.com"; ...@@ -65,13 +63,17 @@ const char kTestUrl[] = "https://www.google.com";
// control the testing environment. // control the testing environment.
class Service { class Service {
public: public:
Service(WebContents* web_contents, const Origin& origin) Service(WebContents* web_contents, const Origin& origin) {
: fetcher_(web_contents->GetBrowserContext(), &provider_) { auto provider = std::make_unique<NiceMock<MockSmsProvider>>();
provider_ = provider.get();
fetcher_ = static_cast<SmsFetcherImpl*>(
SmsFetcher::Get(web_contents->GetBrowserContext()));
fetcher_->SetSmsProviderForTesting(std::move(provider));
WebContentsImpl* web_contents_impl = WebContentsImpl* web_contents_impl =
reinterpret_cast<WebContentsImpl*>(web_contents); reinterpret_cast<WebContentsImpl*>(web_contents);
web_contents_impl->SetDelegate(&delegate_); web_contents_impl->SetDelegate(&delegate_);
service_ = std::make_unique<SmsService>( service_ = std::make_unique<SmsService>(
&fetcher_, origin, web_contents->GetMainFrame(), fetcher_, origin, web_contents->GetMainFrame(),
service_remote_.BindNewPipeAndPassReceiver()); service_remote_.BindNewPipeAndPassReceiver());
} }
...@@ -79,12 +81,11 @@ class Service { ...@@ -79,12 +81,11 @@ class Service {
: Service(web_contents, : Service(web_contents,
web_contents->GetMainFrame()->GetLastCommittedOrigin()) {} web_contents->GetMainFrame()->GetLastCommittedOrigin()) {}
NiceMock<MockSmsWebContentsDelegate>* delegate() { return &delegate_; } NiceMock<MockSmsProvider>* provider() { return provider_; }
NiceMock<MockSmsProvider>* provider() { return &provider_; } SmsFetcherImpl* fetcher() { return fetcher_; }
SmsFetcher* fetcher() { return &fetcher_; }
void CreateSmsPrompt(RenderFrameHost* rfh) { void CreateSmsPrompt(RenderFrameHost* rfh) {
EXPECT_CALL(*delegate(), CreateSmsPrompt(rfh, _, _, _, _)) EXPECT_CALL(delegate_, CreateSmsPrompt(rfh, _, _, _, _))
.WillOnce(Invoke([=](RenderFrameHost*, const Origin& origin, .WillOnce(Invoke([=](RenderFrameHost*, const Origin& origin,
const std::string&, base::OnceClosure on_confirm, const std::string&, base::OnceClosure on_confirm,
base::OnceClosure on_cancel) { base::OnceClosure on_cancel) {
...@@ -118,13 +119,13 @@ class Service { ...@@ -118,13 +119,13 @@ class Service {
void AbortRequest() { service_remote_->Abort(); } void AbortRequest() { service_remote_->Abort(); }
void NotifyReceive(const GURL& url, const string& message) { void NotifyReceive(const GURL& url, const string& message) {
provider_.NotifyReceive(Origin::Create(url), "", message); provider_->NotifyReceive(Origin::Create(url), "", message);
} }
private: private:
NiceMock<MockSmsWebContentsDelegate> delegate_; NiceMock<MockSmsWebContentsDelegate> delegate_;
NiceMock<MockSmsProvider> provider_; NiceMock<MockSmsProvider>* provider_;
SmsFetcherImpl fetcher_; SmsFetcherImpl* fetcher_ = nullptr;
mojo::Remote<blink::mojom::SmsReceiver> service_remote_; mojo::Remote<blink::mojom::SmsReceiver> service_remote_;
std::unique_ptr<SmsService> service_; std::unique_ptr<SmsService> service_;
base::OnceClosure confirm_callback_; base::OnceClosure confirm_callback_;
...@@ -404,15 +405,17 @@ TEST_F(SmsServiceTest, CleansUp) { ...@@ -404,15 +405,17 @@ TEST_F(SmsServiceTest, CleansUp) {
reinterpret_cast<WebContentsImpl*>(web_contents()); reinterpret_cast<WebContentsImpl*>(web_contents());
web_contents_impl->SetDelegate(&delegate); web_contents_impl->SetDelegate(&delegate);
NiceMock<MockSmsProvider> provider; auto provider = std::make_unique<MockSmsProvider>();
SmsFetcherImpl fetcher(web_contents()->GetBrowserContext(), &provider); MockSmsProvider* mock_provider_ptr = provider.get();
SmsFetcherImpl fetcher(web_contents()->GetBrowserContext(),
std::move(provider));
mojo::Remote<blink::mojom::SmsReceiver> service; mojo::Remote<blink::mojom::SmsReceiver> service;
SmsService::Create(&fetcher, main_rfh(), SmsService::Create(&fetcher, main_rfh(),
service.BindNewPipeAndPassReceiver()); service.BindNewPipeAndPassReceiver());
base::RunLoop navigate; base::RunLoop navigate;
EXPECT_CALL(provider, Retrieve()).WillOnce(Invoke([&navigate]() { EXPECT_CALL(*mock_provider_ptr, Retrieve()).WillOnce(Invoke([&navigate]() {
navigate.Quit(); navigate.Quit();
})); }));
...@@ -660,15 +663,17 @@ TEST_F(SmsServiceTest, RecordMetricsForNewPage) { ...@@ -660,15 +663,17 @@ TEST_F(SmsServiceTest, RecordMetricsForNewPage) {
reinterpret_cast<WebContentsImpl*>(web_contents()); reinterpret_cast<WebContentsImpl*>(web_contents());
web_contents_impl->SetDelegate(&delegate); web_contents_impl->SetDelegate(&delegate);
NiceMock<MockSmsProvider> provider; auto provider = std::make_unique<MockSmsProvider>();
SmsFetcherImpl fetcher(web_contents()->GetBrowserContext(), &provider); MockSmsProvider* mock_provider_ptr = provider.get();
SmsFetcherImpl fetcher(web_contents()->GetBrowserContext(),
std::move(provider));
mojo::Remote<blink::mojom::SmsReceiver> service; mojo::Remote<blink::mojom::SmsReceiver> service;
SmsService::Create(&fetcher, main_rfh(), SmsService::Create(&fetcher, main_rfh(),
service.BindNewPipeAndPassReceiver()); service.BindNewPipeAndPassReceiver());
base::RunLoop navigate; base::RunLoop navigate;
EXPECT_CALL(provider, Retrieve()).WillOnce(Invoke([&navigate]() { EXPECT_CALL(*mock_provider_ptr, Retrieve()).WillOnce(Invoke([&navigate]() {
navigate.Quit(); navigate.Quit();
})); }));
...@@ -698,15 +703,17 @@ TEST_F(SmsServiceTest, RecordMetricsForSamePage) { ...@@ -698,15 +703,17 @@ TEST_F(SmsServiceTest, RecordMetricsForSamePage) {
reinterpret_cast<WebContentsImpl*>(web_contents()); reinterpret_cast<WebContentsImpl*>(web_contents());
web_contents_impl->SetDelegate(&delegate); web_contents_impl->SetDelegate(&delegate);
NiceMock<MockSmsProvider> provider; auto provider = std::make_unique<MockSmsProvider>();
SmsFetcherImpl fetcher(web_contents()->GetBrowserContext(), &provider); MockSmsProvider* mock_provider_ptr = provider.get();
SmsFetcherImpl fetcher(web_contents()->GetBrowserContext(),
std::move(provider));
mojo::Remote<blink::mojom::SmsReceiver> service; mojo::Remote<blink::mojom::SmsReceiver> service;
SmsService::Create(&fetcher, main_rfh(), SmsService::Create(&fetcher, main_rfh(),
service.BindNewPipeAndPassReceiver()); service.BindNewPipeAndPassReceiver());
base::RunLoop navigate; base::RunLoop navigate;
EXPECT_CALL(provider, Retrieve()).WillOnce(Invoke([&navigate]() { EXPECT_CALL(*mock_provider_ptr, Retrieve()).WillOnce(Invoke([&navigate]() {
navigate.Quit(); navigate.Quit();
})); }));
...@@ -741,15 +748,17 @@ TEST_F(SmsServiceTest, RecordMetricsForExistingPage) { ...@@ -741,15 +748,17 @@ TEST_F(SmsServiceTest, RecordMetricsForExistingPage) {
reinterpret_cast<WebContentsImpl*>(web_contents()); reinterpret_cast<WebContentsImpl*>(web_contents());
web_contents_impl->SetDelegate(&delegate); web_contents_impl->SetDelegate(&delegate);
NiceMock<MockSmsProvider> provider; auto provider = std::make_unique<MockSmsProvider>();
SmsFetcherImpl fetcher(web_contents()->GetBrowserContext(), &provider); MockSmsProvider* mock_provider_ptr = provider.get();
SmsFetcherImpl fetcher(web_contents()->GetBrowserContext(),
std::move(provider));
mojo::Remote<blink::mojom::SmsReceiver> service; mojo::Remote<blink::mojom::SmsReceiver> service;
SmsService::Create(&fetcher, main_rfh(), SmsService::Create(&fetcher, main_rfh(),
service.BindNewPipeAndPassReceiver()); service.BindNewPipeAndPassReceiver());
base::RunLoop navigate; base::RunLoop navigate;
EXPECT_CALL(provider, Retrieve()).WillOnce(Invoke([&navigate]() { EXPECT_CALL(*mock_provider_ptr, Retrieve()).WillOnce(Invoke([&navigate]() {
navigate.Quit(); navigate.Quit();
})); }));
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#ifndef CONTENT_PUBLIC_BROWSER_SMS_FETCHER_H_ #ifndef CONTENT_PUBLIC_BROWSER_SMS_FETCHER_H_
#define CONTENT_PUBLIC_BROWSER_SMS_FETCHER_H_ #define CONTENT_PUBLIC_BROWSER_SMS_FETCHER_H_
#include <string>
#include "base/observer_list_types.h" #include "base/observer_list_types.h"
#include "content/common/content_export.h" #include "content/common/content_export.h"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment