Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Unified Diff: components/autofill/core/browser/autofill_driver_factory_unittest.cc

Issue 2603623002: AutofillDriverFactory manages information about user gestures (Closed)
Patch Set: Fix typo Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/autofill/core/browser/autofill_driver_factory.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/autofill/core/browser/autofill_driver_factory_unittest.cc
diff --git a/components/autofill/core/browser/autofill_driver_factory_unittest.cc b/components/autofill/core/browser/autofill_driver_factory_unittest.cc
index e79c47160005cc9d2e7b47525a5b953c71230f86..8355161333cf574bab50c46a523ff40712cc4907 100644
--- a/components/autofill/core/browser/autofill_driver_factory_unittest.cc
+++ b/components/autofill/core/browser/autofill_driver_factory_unittest.cc
@@ -25,7 +25,8 @@ class MockAutofillClient : public TestAutofillClient {
};
// Just a stub AutofillDriver implementation which announces its construction
-// and desctruction by updating the passed |instance_counter|.
+// and desctruction by updating the passed |instance_counter|. It also records
+// when "user gesture observed" was signalled to it.
class CountingAutofillDriver : public TestAutofillDriver {
public:
CountingAutofillDriver(int* instance_counter)
@@ -35,8 +36,19 @@ class CountingAutofillDriver : public TestAutofillDriver {
~CountingAutofillDriver() override { --*instance_counter_; }
+ // Note that EXPECT_CALL cannot be used here, because creation and
+ // notification of the same driver might be done by a single AddForKey call
+ // from the test. Therefore tracking the "gesture_observed" flag is done
+ // explicitly here.
+ void NotifyFirstUserGestureObservedInTab() override {
+ gesture_observed_ = true;
+ }
+
+ bool gesture_observed() { return gesture_observed_; }
+
private:
int* const instance_counter_;
+ bool gesture_observed_ = false;
DISALLOW_COPY_AND_ASSIGN(CountingAutofillDriver);
};
@@ -51,11 +63,8 @@ class PublicAutofillDriverFactory : public AutofillDriverFactory {
~PublicAutofillDriverFactory() {}
- using AutofillDriverFactory::DriverForKey;
using AutofillDriverFactory::AddForKey;
using AutofillDriverFactory::DeleteForKey;
- using AutofillDriverFactory::NavigationFinished;
- using AutofillDriverFactory::TabHidden;
};
// Wrapper around an integer, checking that the integer is 0 on desctruction.
@@ -85,6 +94,11 @@ class AutofillDriverFactoryTest : public testing::Test {
// constants.
void* KeyFrom(int x) { return reinterpret_cast<void*>(x); }
+ // Convenience accessor with a cast to CountingAutofillDriver.
+ CountingAutofillDriver* GetDriver(void* key) {
+ return static_cast<CountingAutofillDriver*>(factory_.DriverForKey(key));
+ }
+
std::unique_ptr<AutofillDriver> CreateDriver() {
++drivers_created_;
return base::MakeUnique<CountingAutofillDriver>(instance_counter_.val());
@@ -173,4 +187,54 @@ TEST_F(AutofillDriverFactoryTest, TabHidden) {
factory_.TabHidden();
}
+// Without calling OnFirstUserGestureObserved on the factory, the factory will
+// not call NotifyFirstUserGestureObservedInTab on a driver.
+TEST_F(AutofillDriverFactoryTest, OnFirstUserGestureObserved_NotCalled) {
+ factory_.AddForKey(KeyFrom(1), CreateDriverCallback());
+ EXPECT_FALSE(GetDriver(KeyFrom(1))->gesture_observed());
+}
+
+// Call OnFirstUserGestureObserved on the factory with one driver. The factory
+// will call NotifyFirstUserGestureObservedInTab on that driver.
+TEST_F(AutofillDriverFactoryTest, OnFirstUserGestureObserved_CalledOld) {
+ factory_.AddForKey(KeyFrom(1), CreateDriverCallback());
+ factory_.OnFirstUserGestureObserved();
+ EXPECT_TRUE(GetDriver(KeyFrom(1))->gesture_observed());
+}
+
+// Call OnFirstUserGestureObserved on the factory without drivers. Add a
+// driver. The factory will call NotifyFirstUserGestureObservedInTab on that
+// driver.
+TEST_F(AutofillDriverFactoryTest, OnFirstUserGestureObserved_CalledNew) {
+ factory_.OnFirstUserGestureObserved();
+ factory_.AddForKey(KeyFrom(1), CreateDriverCallback());
+ EXPECT_TRUE(GetDriver(KeyFrom(1))->gesture_observed());
+}
+
+// Combining the CalledOld and CalledNew test cases into one.
+TEST_F(AutofillDriverFactoryTest, OnFirstUserGestureObserved_MultipleDrivers) {
+ factory_.AddForKey(KeyFrom(1), CreateDriverCallback());
+ factory_.OnFirstUserGestureObserved();
+ EXPECT_TRUE(GetDriver(KeyFrom(1))->gesture_observed());
+
+ factory_.AddForKey(KeyFrom(7), CreateDriverCallback());
+ EXPECT_TRUE(GetDriver(KeyFrom(7))->gesture_observed());
+}
+
+// Call OnFirstUserGestureObserved on the factory with one driver. Simulate
+// navigation to a different page. Add a driver. The factory will not call
+// NotifyFirstUserGestureObservedInTab on that driver.
+TEST_F(AutofillDriverFactoryTest, OnFirstUserGestureObserved_CalledNavigation) {
+ factory_.AddForKey(KeyFrom(1), CreateDriverCallback());
+ factory_.OnFirstUserGestureObserved();
+ EXPECT_TRUE(GetDriver(KeyFrom(1))->gesture_observed());
+
+ EXPECT_CALL(client_, HideAutofillPopup());
+ factory_.NavigationFinished();
+
+ // Adding a sub-frame
+ factory_.AddForKey(KeyFrom(2), CreateDriverCallback());
+ EXPECT_FALSE(GetDriver(KeyFrom(2))->gesture_observed());
+}
+
} // namespace autofill
« no previous file with comments | « components/autofill/core/browser/autofill_driver_factory.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698