OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/compiler_specific.h" | 5 #include "base/compiler_specific.h" |
6 #include "base/stringprintf.h" | 6 #include "base/stringprintf.h" |
7 #include "base/string_number_conversions.h" | 7 #include "base/string_number_conversions.h" |
8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
9 #include "chrome/browser/content_settings/tab_specific_content_settings.h" | 9 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
10 #include "chrome/browser/dom_operation_notification_details.h" | 10 #include "chrome/browser/dom_operation_notification_details.h" |
11 #include "chrome/browser/geolocation/geolocation_content_settings_map.h" | 11 #include "chrome/browser/geolocation/geolocation_content_settings_map.h" |
12 #include "chrome/browser/geolocation/geolocation_settings_state.h" | 12 #include "chrome/browser/geolocation/geolocation_settings_state.h" |
13 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
14 #include "chrome/browser/tab_contents/confirm_infobar_delegate.h" | 14 #include "chrome/browser/tab_contents/confirm_infobar_delegate.h" |
15 #include "chrome/browser/tab_contents/infobar.h" | 15 #include "chrome/browser/tab_contents/infobar.h" |
16 #include "chrome/browser/ui/browser.h" | 16 #include "chrome/browser/ui/browser.h" |
17 #include "chrome/browser/ui/browser_list.h" | 17 #include "chrome/browser/ui/browser_list.h" |
18 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 18 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 19 #include "chrome/common/chrome_notification_types.h" |
19 #include "chrome/common/chrome_paths.h" | 20 #include "chrome/common/chrome_paths.h" |
20 #include "chrome/test/in_process_browser_test.h" | 21 #include "chrome/test/in_process_browser_test.h" |
21 #include "chrome/test/ui_test_utils.h" | 22 #include "chrome/test/ui_test_utils.h" |
22 #include "content/browser/geolocation/arbitrator_dependency_factories_for_test.h
" | 23 #include "content/browser/geolocation/arbitrator_dependency_factories_for_test.h
" |
23 #include "content/browser/geolocation/location_arbitrator.h" | 24 #include "content/browser/geolocation/location_arbitrator.h" |
24 #include "content/browser/geolocation/mock_location_provider.h" | 25 #include "content/browser/geolocation/mock_location_provider.h" |
25 #include "content/browser/renderer_host/render_view_host.h" | 26 #include "content/browser/renderer_host/render_view_host.h" |
26 #include "content/browser/tab_contents/tab_contents.h" | 27 #include "content/browser/tab_contents/tab_contents.h" |
27 #include "content/common/geoposition.h" | 28 #include "content/common/geoposition.h" |
28 #include "content/common/notification_details.h" | 29 #include "content/common/notification_details.h" |
29 #include "content/common/notification_service.h" | 30 #include "content/common/notification_service.h" |
30 #include "content/common/notification_type.h" | |
31 #include "net/base/net_util.h" | 31 #include "net/base/net_util.h" |
32 #include "net/test/test_server.h" | 32 #include "net/test/test_server.h" |
33 | 33 |
34 namespace { | 34 namespace { |
35 | 35 |
36 // Used to block until an iframe is loaded via a javascript call. | 36 // Used to block until an iframe is loaded via a javascript call. |
37 // Note: NavigateToURLBlockUntilNavigationsComplete doesn't seem to work for | 37 // Note: NavigateToURLBlockUntilNavigationsComplete doesn't seem to work for |
38 // multiple embedded iframes, as notifications seem to be 'batched'. Instead, we | 38 // multiple embedded iframes, as notifications seem to be 'batched'. Instead, we |
39 // load and wait one single frame here by calling a javascript function. | 39 // load and wait one single frame here by calling a javascript function. |
40 class IFrameLoader : public NotificationObserver { | 40 class IFrameLoader : public NotificationObserver { |
41 public: | 41 public: |
42 IFrameLoader(Browser* browser, int iframe_id, const GURL& url) | 42 IFrameLoader(Browser* browser, int iframe_id, const GURL& url) |
43 : navigation_completed_(false), | 43 : navigation_completed_(false), |
44 javascript_completed_(false) { | 44 javascript_completed_(false) { |
45 NavigationController* controller = | 45 NavigationController* controller = |
46 &browser->GetSelectedTabContents()->controller(); | 46 &browser->GetSelectedTabContents()->controller(); |
47 registrar_.Add(this, NotificationType::LOAD_STOP, | 47 registrar_.Add(this, content::NOTIFICATION_LOAD_STOP, |
48 Source<NavigationController>(controller)); | 48 Source<NavigationController>(controller)); |
49 registrar_.Add(this, NotificationType::DOM_OPERATION_RESPONSE, | 49 registrar_.Add(this, chrome::NOTIFICATION_DOM_OPERATION_RESPONSE, |
50 NotificationService::AllSources()); | 50 NotificationService::AllSources()); |
51 std::string script = base::StringPrintf( | 51 std::string script = base::StringPrintf( |
52 "window.domAutomationController.setAutomationId(0);" | 52 "window.domAutomationController.setAutomationId(0);" |
53 "window.domAutomationController.send(addIFrame(%d, \"%s\"));", | 53 "window.domAutomationController.send(addIFrame(%d, \"%s\"));", |
54 iframe_id, | 54 iframe_id, |
55 url.spec().c_str()); | 55 url.spec().c_str()); |
56 browser->GetSelectedTabContents()->render_view_host()-> | 56 browser->GetSelectedTabContents()->render_view_host()-> |
57 ExecuteJavascriptInWebFrame(string16(), UTF8ToUTF16(script)); | 57 ExecuteJavascriptInWebFrame(string16(), UTF8ToUTF16(script)); |
58 ui_test_utils::RunMessageLoop(); | 58 ui_test_utils::RunMessageLoop(); |
59 | 59 |
60 EXPECT_EQ(base::StringPrintf("\"%d\"", iframe_id), javascript_response_); | 60 EXPECT_EQ(base::StringPrintf("\"%d\"", iframe_id), javascript_response_); |
61 registrar_.RemoveAll(); | 61 registrar_.RemoveAll(); |
62 // Now that we loaded the iframe, let's fetch its src. | 62 // Now that we loaded the iframe, let's fetch its src. |
63 script = base::StringPrintf( | 63 script = base::StringPrintf( |
64 "window.domAutomationController.send(getIFrameSrc(%d))", iframe_id); | 64 "window.domAutomationController.send(getIFrameSrc(%d))", iframe_id); |
65 std::string iframe_src; | 65 std::string iframe_src; |
66 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 66 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( |
67 browser->GetSelectedTabContents()->render_view_host(), | 67 browser->GetSelectedTabContents()->render_view_host(), |
68 L"", UTF8ToWide(script), &iframe_src)); | 68 L"", UTF8ToWide(script), &iframe_src)); |
69 iframe_url_ = GURL(iframe_src); | 69 iframe_url_ = GURL(iframe_src); |
70 } | 70 } |
71 | 71 |
72 GURL iframe_url() const { return iframe_url_; } | 72 GURL iframe_url() const { return iframe_url_; } |
73 | 73 |
74 virtual void Observe(NotificationType type, | 74 virtual void Observe(int type, |
75 const NotificationSource& source, | 75 const NotificationSource& source, |
76 const NotificationDetails& details) { | 76 const NotificationDetails& details) { |
77 if (type == NotificationType::LOAD_STOP) { | 77 if (type == content::NOTIFICATION_LOAD_STOP) { |
78 navigation_completed_ = true; | 78 navigation_completed_ = true; |
79 } else if (type == NotificationType::DOM_OPERATION_RESPONSE) { | 79 } else if (type == chrome::NOTIFICATION_DOM_OPERATION_RESPONSE) { |
80 Details<DomOperationNotificationDetails> dom_op_details(details); | 80 Details<DomOperationNotificationDetails> dom_op_details(details); |
81 javascript_response_ = dom_op_details->json(); | 81 javascript_response_ = dom_op_details->json(); |
82 javascript_completed_ = true; | 82 javascript_completed_ = true; |
83 } | 83 } |
84 if (javascript_completed_ && navigation_completed_) | 84 if (javascript_completed_ && navigation_completed_) |
85 MessageLoopForUI::current()->Quit(); | 85 MessageLoopForUI::current()->Quit(); |
86 } | 86 } |
87 | 87 |
88 private: | 88 private: |
89 NotificationRegistrar registrar_; | 89 NotificationRegistrar registrar_; |
(...skipping 15 matching lines...) Expand all Loading... |
105 class GeolocationNotificationObserver : public NotificationObserver { | 105 class GeolocationNotificationObserver : public NotificationObserver { |
106 public: | 106 public: |
107 // If |wait_for_infobar| is true, AddWatchAndWaitForNotification will block | 107 // If |wait_for_infobar| is true, AddWatchAndWaitForNotification will block |
108 // until the infobar has been displayed; otherwise it will block until the | 108 // until the infobar has been displayed; otherwise it will block until the |
109 // navigation is completed. | 109 // navigation is completed. |
110 explicit GeolocationNotificationObserver(bool wait_for_infobar) | 110 explicit GeolocationNotificationObserver(bool wait_for_infobar) |
111 : wait_for_infobar_(wait_for_infobar), | 111 : wait_for_infobar_(wait_for_infobar), |
112 infobar_(NULL), | 112 infobar_(NULL), |
113 navigation_started_(false), | 113 navigation_started_(false), |
114 navigation_completed_(false) { | 114 navigation_completed_(false) { |
115 registrar_.Add(this, NotificationType::DOM_OPERATION_RESPONSE, | 115 registrar_.Add(this, chrome::NOTIFICATION_DOM_OPERATION_RESPONSE, |
116 NotificationService::AllSources()); | 116 NotificationService::AllSources()); |
117 if (wait_for_infobar) { | 117 if (wait_for_infobar) { |
118 registrar_.Add(this, NotificationType::TAB_CONTENTS_INFOBAR_ADDED, | 118 registrar_.Add(this, chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, |
119 NotificationService::AllSources()); | 119 NotificationService::AllSources()); |
120 } else { | 120 } else { |
121 registrar_.Add(this, NotificationType::NAV_ENTRY_COMMITTED, | 121 registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
122 NotificationService::AllSources()); | 122 NotificationService::AllSources()); |
123 registrar_.Add(this, NotificationType::LOAD_START, | 123 registrar_.Add(this, content::NOTIFICATION_LOAD_START, |
124 NotificationService::AllSources()); | 124 NotificationService::AllSources()); |
125 registrar_.Add(this, NotificationType::LOAD_STOP, | 125 registrar_.Add(this, content::NOTIFICATION_LOAD_STOP, |
126 NotificationService::AllSources()); | 126 NotificationService::AllSources()); |
127 } | 127 } |
128 } | 128 } |
129 | 129 |
130 void AddWatchAndWaitForNotification(RenderViewHost* render_view_host, | 130 void AddWatchAndWaitForNotification(RenderViewHost* render_view_host, |
131 const std::wstring& iframe_xpath) { | 131 const std::wstring& iframe_xpath) { |
132 LOG(WARNING) << "will add geolocation watch"; | 132 LOG(WARNING) << "will add geolocation watch"; |
133 std::string script = | 133 std::string script = |
134 "window.domAutomationController.setAutomationId(0);" | 134 "window.domAutomationController.setAutomationId(0);" |
135 "window.domAutomationController.send(geoStart());"; | 135 "window.domAutomationController.send(geoStart());"; |
136 render_view_host->ExecuteJavascriptInWebFrame(WideToUTF16Hack(iframe_xpath), | 136 render_view_host->ExecuteJavascriptInWebFrame(WideToUTF16Hack(iframe_xpath), |
137 UTF8ToUTF16(script)); | 137 UTF8ToUTF16(script)); |
138 ui_test_utils::RunMessageLoop(); | 138 ui_test_utils::RunMessageLoop(); |
139 registrar_.RemoveAll(); | 139 registrar_.RemoveAll(); |
140 LOG(WARNING) << "got geolocation watch" << javascript_response_; | 140 LOG(WARNING) << "got geolocation watch" << javascript_response_; |
141 EXPECT_NE("\"0\"", javascript_response_); | 141 EXPECT_NE("\"0\"", javascript_response_); |
142 if (wait_for_infobar_) { | 142 if (wait_for_infobar_) { |
143 EXPECT_TRUE(infobar_); | 143 EXPECT_TRUE(infobar_); |
144 } else { | 144 } else { |
145 EXPECT_TRUE(navigation_completed_); | 145 EXPECT_TRUE(navigation_completed_); |
146 } | 146 } |
147 } | 147 } |
148 | 148 |
149 // NotificationObserver | 149 // NotificationObserver |
150 virtual void Observe(NotificationType type, | 150 virtual void Observe(int type, |
151 const NotificationSource& source, | 151 const NotificationSource& source, |
152 const NotificationDetails& details) { | 152 const NotificationDetails& details) { |
153 if (type.value == NotificationType::TAB_CONTENTS_INFOBAR_ADDED) { | 153 if (type == chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED) { |
154 infobar_ = Details<InfoBarAddedDetails>(details).ptr(); | 154 infobar_ = Details<InfoBarAddedDetails>(details).ptr(); |
155 ASSERT_TRUE(infobar_->GetIcon()); | 155 ASSERT_TRUE(infobar_->GetIcon()); |
156 ASSERT_TRUE(infobar_->AsConfirmInfoBarDelegate()); | 156 ASSERT_TRUE(infobar_->AsConfirmInfoBarDelegate()); |
157 } else if (type == NotificationType::DOM_OPERATION_RESPONSE) { | 157 } else if (type == chrome::NOTIFICATION_DOM_OPERATION_RESPONSE) { |
158 Details<DomOperationNotificationDetails> dom_op_details(details); | 158 Details<DomOperationNotificationDetails> dom_op_details(details); |
159 javascript_response_ = dom_op_details->json(); | 159 javascript_response_ = dom_op_details->json(); |
160 LOG(WARNING) << "javascript_response " << javascript_response_; | 160 LOG(WARNING) << "javascript_response " << javascript_response_; |
161 } else if (type == NotificationType::NAV_ENTRY_COMMITTED || | 161 } else if (type == content::NOTIFICATION_NAV_ENTRY_COMMITTED || |
162 type == NotificationType::LOAD_START) { | 162 type == content::NOTIFICATION_LOAD_START) { |
163 navigation_started_ = true; | 163 navigation_started_ = true; |
164 } else if (type == NotificationType::LOAD_STOP) { | 164 } else if (type == content::NOTIFICATION_LOAD_STOP) { |
165 if (navigation_started_) { | 165 if (navigation_started_) { |
166 navigation_started_ = false; | 166 navigation_started_ = false; |
167 navigation_completed_ = true; | 167 navigation_completed_ = true; |
168 } | 168 } |
169 } | 169 } |
170 | 170 |
171 // We're either waiting for just the inforbar, or for both a javascript | 171 // We're either waiting for just the inforbar, or for both a javascript |
172 // prompt and response. | 172 // prompt and response. |
173 if (wait_for_infobar_ && infobar_) | 173 if (wait_for_infobar_ && infobar_) |
174 MessageLoopForUI::current()->Quit(); | 174 MessageLoopForUI::current()->Quit(); |
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
645 "window.domAutomationController.setAutomationId(0);" | 645 "window.domAutomationController.setAutomationId(0);" |
646 "window.domAutomationController.send(window.close());"; | 646 "window.domAutomationController.send(window.close());"; |
647 bool result = | 647 bool result = |
648 ui_test_utils::ExecuteJavaScript( | 648 ui_test_utils::ExecuteJavaScript( |
649 current_browser_->GetSelectedTabContents()->render_view_host(), | 649 current_browser_->GetSelectedTabContents()->render_view_host(), |
650 L"", UTF8ToWide(script)); | 650 L"", UTF8ToWide(script)); |
651 EXPECT_EQ(result, true); | 651 EXPECT_EQ(result, true); |
652 } | 652 } |
653 | 653 |
654 } // namespace | 654 } // namespace |
OLD | NEW |