mobile/android/base/tests/testDoorHanger.java

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:683a24e6e965
1 package org.mozilla.gecko.tests;
2
3 import org.json.JSONArray;
4 import org.json.JSONException;
5 import org.json.JSONObject;
6 import org.mozilla.gecko.Actions;
7
8 /* This test will test if doorhangers are displayed and dismissed
9 The test will test:
10 * geolocation doorhangers - sharing and not sharing the location dismisses the doorhanger
11 * opening a new tab hides the doorhanger
12 * offline storage permission doorhangers - allowing and not allowing offline storage dismisses the doorhanger
13 * Password Manager doorhangers - Remember and Not Now options dismiss the doorhanger
14 */
15 public class testDoorHanger extends BaseTest {
16 public void testDoorHanger() {
17 String GEO_URL = getAbsoluteUrl("/robocop/robocop_geolocation.html");
18 String BLANK_URL = getAbsoluteUrl("/robocop/robocop_blank_01.html");
19 String OFFLINE_STORAGE_URL = getAbsoluteUrl("/robocop/robocop_offline_storage.html");
20 String LOGIN_URL = getAbsoluteUrl("/robocop/robocop_login.html");
21
22 // Strings used in doorhanger messages and buttons
23 String GEO_MESSAGE = "Share your location with";
24 String GEO_ALLOW = "Share";
25 String GEO_DENY = "Don't share";
26
27 String OFFLINE_MESSAGE = "to store data on your device for offline use";
28 String OFFLINE_ALLOW = "Allow";
29 String OFFLINE_DENY = "Don't allow";
30
31 String LOGIN_MESSAGE = "Save password";
32 String LOGIN_ALLOW = "Save";
33 String LOGIN_DENY = "Don't save";
34
35 blockForGeckoReady();
36
37 // Test geolocation notification
38 inputAndLoadUrl(GEO_URL);
39 waitForText(GEO_MESSAGE);
40 mAsserter.is(mSolo.searchText(GEO_MESSAGE), true, "Geolocation doorhanger has been displayed");
41
42 // Test "Share" button hides the notification
43 mSolo.clickOnCheckBox(0);
44 mSolo.clickOnButton(GEO_ALLOW);
45 mAsserter.is(mSolo.searchText(GEO_MESSAGE), false, "Geolocation doorhanger has been hidden when allowing share");
46
47 // Re-trigger geolocation notification
48 inputAndLoadUrl(GEO_URL);
49 waitForText(GEO_MESSAGE);
50
51 // Test "Don't share" button hides the notification
52 mSolo.clickOnCheckBox(0);
53 mSolo.clickOnButton(GEO_DENY);
54 mAsserter.is(mSolo.searchText(GEO_MESSAGE), false, "Geolocation doorhanger has been hidden when denying share");
55
56 /* FIXME: disabled on fig - bug 880060 (for some reason this fails because of some raciness)
57 // Re-trigger geolocation notification
58 inputAndLoadUrl(GEO_URL);
59 waitForText(GEO_MESSAGE);
60
61 // Add a new tab
62 addTab(BLANK_URL);
63
64 // Make sure doorhanger is hidden
65 mAsserter.is(mSolo.searchText(GEO_MESSAGE), false, "Geolocation doorhanger notification is hidden when opening a new tab");
66 */
67
68
69 boolean offlineAllowedByDefault = true;
70 // Save offline-allow-by-default preferences first
71 final String[] prefNames = { "offline-apps.allow_by_default" };
72 final int ourRequestId = 0x7357;
73 final Actions.RepeatedEventExpecter eventExpecter = mActions.expectGeckoEvent("Preferences:Data");
74 mActions.sendPreferencesGetEvent(ourRequestId, prefNames);
75 try {
76 JSONObject data = null;
77 int requestId = -1;
78
79 // Wait until we get the correct "Preferences:Data" event
80 while (requestId != ourRequestId) {
81 data = new JSONObject(eventExpecter.blockForEventData());
82 requestId = data.getInt("requestId");
83 }
84 eventExpecter.unregisterListener();
85
86 JSONArray preferences = data.getJSONArray("preferences");
87 if (preferences.length() > 0) {
88 JSONObject pref = (JSONObject) preferences.get(0);
89 offlineAllowedByDefault = pref.getBoolean("value");
90 }
91
92 // Turn off offline-allow-by-default
93 JSONObject jsonPref = new JSONObject();
94 jsonPref.put("name", "offline-apps.allow_by_default");
95 jsonPref.put("type", "bool");
96 jsonPref.put("value", false);
97 setPreferenceAndWaitForChange(jsonPref);
98 } catch (JSONException e) {
99 mAsserter.ok(false, "exception getting preference", e.toString());
100 }
101
102 // Load offline storage page
103 inputAndLoadUrl(OFFLINE_STORAGE_URL);
104 waitForText(OFFLINE_MESSAGE);
105
106 // Test doorhanger dismissed when tapping "Don't share"
107 mSolo.clickOnCheckBox(0);
108 mSolo.clickOnButton(OFFLINE_DENY);
109 mAsserter.is(mSolo.searchText(OFFLINE_MESSAGE), false, "Offline storage doorhanger notification is hidden when denying storage");
110
111 // Load offline storage page
112 inputAndLoadUrl(OFFLINE_STORAGE_URL);
113 waitForText(OFFLINE_MESSAGE);
114
115 // Test doorhanger dismissed when tapping "Allow" and is not displayed again
116 mSolo.clickOnButton(OFFLINE_ALLOW);
117 mAsserter.is(mSolo.searchText(OFFLINE_MESSAGE), false, "Offline storage doorhanger notification is hidden when allowing storage");
118 inputAndLoadUrl(OFFLINE_STORAGE_URL);
119 mAsserter.is(mSolo.searchText(OFFLINE_MESSAGE), false, "Offline storage doorhanger is no longer triggered");
120
121 try {
122 // Revert offline setting
123 JSONObject jsonPref = new JSONObject();
124 jsonPref.put("name", "offline-apps.allow_by_default");
125 jsonPref.put("type", "bool");
126 jsonPref.put("value", offlineAllowedByDefault);
127 setPreferenceAndWaitForChange(jsonPref);
128 } catch (JSONException e) {
129 mAsserter.ok(false, "exception setting preference", e.toString());
130 }
131
132
133 // Load login page
134 inputAndLoadUrl(LOGIN_URL);
135 waitForText(LOGIN_MESSAGE);
136
137 // Test doorhanger is dismissed when tapping "Don't save"
138 mSolo.clickOnButton(LOGIN_DENY);
139 mAsserter.is(mSolo.searchText(LOGIN_MESSAGE), false, "Login doorhanger notification is hidden when denying saving password");
140
141 // Load login page
142 inputAndLoadUrl(LOGIN_URL);
143 waitForText(LOGIN_MESSAGE);
144
145 // Test doorhanger is dismissed when tapping "Save" and is no longer triggered
146 mSolo.clickOnButton(LOGIN_ALLOW);
147 mAsserter.is(mSolo.searchText(LOGIN_MESSAGE), false, "Login doorhanger notification is hidden when allowing saving password");
148
149 // Reload the page and check that there is no doorhanger displayed
150 inputAndLoadUrl(LOGIN_URL);
151 mAsserter.is(mSolo.searchText(LOGIN_MESSAGE), false, "Login doorhanger is not re-triggered");
152 }
153 }

mercurial