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

Side by Side Diff: webkit/tools/test_shell/gtk/test_webview_delegate.cc

Issue 9735: test_webview_delegate.cc was forked for the Mac test shell, and then (Closed)
Patch Set: Created 12 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « webkit/tools/test_shell/SConscript ('k') | webkit/tools/test_shell/gtk/webview_host.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2008 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 // This file was forked off the Mac port. 5 // This file was forked off the Mac port.
6 6
7 #include "webkit/tools/test_shell/test_webview_delegate.h" 7 #include "webkit/tools/test_shell/test_webview_delegate.h"
8 8
9 #include <gtk/gtk.h> 9 #include <gtk/gtk.h>
10 10
11 #include "base/gfx/point.h" 11 #include "base/gfx/point.h"
12 #include "base/string_util.h" 12 #include "base/string_util.h"
13 #include "net/base/net_errors.h" 13 #include "net/base/net_errors.h"
14 #include "chrome/common/page_transition_types.h" 14 #include "chrome/common/page_transition_types.h"
15 #include "webkit/glue/webdatasource.h" 15 #include "webkit/glue/webdatasource.h"
16 #include "webkit/glue/webdropdata.h" 16 #include "webkit/glue/webdropdata.h"
17 #include "webkit/glue/weberror.h" 17 #include "webkit/glue/weberror.h"
18 #include "webkit/glue/webframe.h" 18 #include "webkit/glue/webframe.h"
19 #include "webkit/glue/webpreferences.h" 19 #include "webkit/glue/webpreferences.h"
20 #include "webkit/glue/weburlrequest.h" 20 #include "webkit/glue/weburlrequest.h"
21 #include "webkit/glue/webkit_glue.h" 21 #include "webkit/glue/webkit_glue.h"
22 #include "webkit/glue/webview.h" 22 #include "webkit/glue/webview.h"
23 #include "webkit/glue/window_open_disposition.h" 23 #include "webkit/glue/window_open_disposition.h"
24 #include "webkit/tools/test_shell/test_navigation_controller.h" 24 #include "webkit/tools/test_shell/test_navigation_controller.h"
25 #include "webkit/tools/test_shell/test_shell.h" 25 #include "webkit/tools/test_shell/test_shell.h"
26 26
27 static int32 next_page_id_ = 1;
28
29 // WebViewDelegate ----------------------------------------------------------- 27 // WebViewDelegate -----------------------------------------------------------
30 28
31 TestWebViewDelegate::~TestWebViewDelegate() { 29 TestWebViewDelegate::~TestWebViewDelegate() {
32 } 30 }
33 31
34 WebView* TestWebViewDelegate::CreateWebView(WebView* webview,
35 bool user_gesture) {
36 return shell_->CreateWebView(webview);
37 }
38
39 WebWidget* TestWebViewDelegate::CreatePopupWidget(WebView* webview) {
40 return shell_->CreatePopupWidget(webview);
41 }
42
43 WebPluginDelegate* TestWebViewDelegate::CreatePluginDelegate( 32 WebPluginDelegate* TestWebViewDelegate::CreatePluginDelegate(
44 WebView* webview, 33 WebView* webview,
45 const GURL& url, 34 const GURL& url,
46 const std::string& mime_type, 35 const std::string& mime_type,
47 const std::string& clsid, 36 const std::string& clsid,
48 std::string* actual_mime_type) { 37 std::string* actual_mime_type) {
38 NOTIMPLEMENTED();
49 return NULL; 39 return NULL;
50 } 40 }
51 41
52 void TestWebViewDelegate::OpenURL(WebView* webview, const GURL& url, 42 void TestWebViewDelegate::ShowJavaScriptAlert(const std::wstring& message) {
53 const GURL&, // TODO(eroman): use referrer 43 NOTIMPLEMENTED();
54 WindowOpenDisposition disposition) {
55 DCHECK_NE(disposition, CURRENT_TAB); // No code for this
56 if (disposition == SUPPRESS_OPEN)
57 return;
58 TestShell* shell = NULL;
59 if (TestShell::CreateNewWindow(UTF8ToWide(url.spec()), &shell))
60 shell->Show(shell->webView(), disposition);
61 }
62
63 void TestWebViewDelegate::DidStartLoading(WebView* webview) {
64 if (page_is_loading_) {
65 LOG(ERROR) << "DidStartLoading called while loading";
66 return;
67 }
68 page_is_loading_ = true;
69 }
70
71 void TestWebViewDelegate::DidStopLoading(WebView* webview) {
72 if (!page_is_loading_) {
73 LOG(ERROR) << "DidStopLoading called while not loading";
74 return;
75 }
76 page_is_loading_ = false;
77 }
78
79 void TestWebViewDelegate::WindowObjectCleared(WebFrame* webframe) {
80 shell_->BindJSObjectsToWindow(webframe);
81 }
82
83 WindowOpenDisposition TestWebViewDelegate::DispositionForNavigationAction(
84 WebView* webview,
85 WebFrame* frame,
86 const WebRequest* request,
87 WebNavigationType type,
88 WindowOpenDisposition disposition,
89 bool is_redirect) {
90 if (is_custom_policy_delegate_) {
91 std::wstring frame_name = frame->GetName();
92 printf("Policy delegate: attempt to load %s\n",
93 request->GetURL().spec().c_str());
94 return IGNORE_ACTION;
95 } else {
96 return static_cast<WindowOpenDisposition>(
97 WebViewDelegate::DispositionForNavigationAction(webview, frame, request,
98 type, disposition,
99 is_redirect));
100 }
101 }
102
103 void TestWebViewDelegate::SetCustomPolicyDelegate(bool isCustom) {
104 is_custom_policy_delegate_ = isCustom;
105 }
106
107 void TestWebViewDelegate::AssignIdentifierToRequest(WebView* webview,
108 uint32 identifier,
109 const WebRequest& request) {
110 if (shell_->ShouldDumpResourceLoadCallbacks()) {
111 resource_identifier_map_[identifier] = request.GetURL().spec();
112 }
113 }
114
115 std::string TestWebViewDelegate::GetResourceDescription(uint32 identifier) {
116 ResourceMap::iterator it = resource_identifier_map_.find(identifier);
117 return it != resource_identifier_map_.end() ? it->second : "<unknown>";
118 }
119
120 void TestWebViewDelegate::WillSendRequest(WebView* webview,
121 uint32 identifier,
122 WebRequest* request) {
123 std::string request_url = request->GetURL().spec();
124
125 if (shell_->ShouldDumpResourceLoadCallbacks()) {
126 printf("%s - willSendRequest <WebRequest URL \"%s\">\n",
127 GetResourceDescription(identifier).c_str(),
128 request_url.c_str());
129 }
130
131 // Set the new substituted URL.
132 request->SetURL(GURL(TestShell::RewriteLocalUrl(request_url)));
133 }
134
135 void TestWebViewDelegate::DidFinishLoading(WebView* webview,
136 uint32 identifier) {
137 if (shell_->ShouldDumpResourceLoadCallbacks()) {
138 printf("%s - didFinishLoading\n",
139 GetResourceDescription(identifier).c_str());
140 }
141
142 resource_identifier_map_.erase(identifier);
143 }
144
145 void TestWebViewDelegate::DidFailLoadingWithError(WebView* webview,
146 uint32 identifier,
147 const WebError& error) {
148 if (shell_->ShouldDumpResourceLoadCallbacks()) {
149 printf("%s - didFailLoadingWithError <WebError code %d,"
150 " failing URL \"%s\">\n",
151 GetResourceDescription(identifier).c_str(),
152 error.GetErrorCode(),
153 error.GetFailedURL().spec().c_str());
154 }
155
156 resource_identifier_map_.erase(identifier);
157 }
158
159 void TestWebViewDelegate::DidStartProvisionalLoadForFrame(
160 WebView* webview,
161 WebFrame* frame,
162 NavigationGesture gesture) {
163 if (shell_->ShouldDumpFrameLoadCallbacks()) {
164 printf("%S - didStartProvisionalLoadForFrame\n",
165 GetFrameDescription(frame).c_str());
166 }
167
168 if (!top_loading_frame_) {
169 top_loading_frame_ = frame;
170 }
171 UpdateAddressBar(webview);
172 }
173
174 void TestWebViewDelegate::DidReceiveServerRedirectForProvisionalLoadForFrame(
175 WebView* webview,
176 WebFrame* frame) {
177 if (shell_->ShouldDumpFrameLoadCallbacks()) {
178 printf("%S - didReceiveServerRedirectForProvisionalLoadForFrame\n",
179 GetFrameDescription(frame).c_str());
180 }
181
182 UpdateAddressBar(webview);
183 }
184
185 void TestWebViewDelegate::DidFailProvisionalLoadWithError(
186 WebView* webview,
187 const WebError& error,
188 WebFrame* frame) {
189 if (shell_->ShouldDumpFrameLoadCallbacks()) {
190 printf("%S - didFailProvisionalLoadWithError\n",
191 GetFrameDescription(frame).c_str());
192 }
193
194 if (page_is_loading_)
195 DidStopLoading(webview);
196 LocationChangeDone(frame->GetProvisionalDataSource());
197
198 // Don't display an error page if we're running layout tests, because
199 // DumpRenderTree doesn't.
200 if (!shell_->interactive())
201 return;
202
203 // Don't display an error page if this is simply a cancelled load. Aside
204 // from being dumb, WebCore doesn't expect it and it will cause a crash.
205 if (error.GetErrorCode() == net::ERR_ABORTED)
206 return;
207
208 const WebRequest& failed_request =
209 frame->GetProvisionalDataSource()->GetRequest();
210 TestShellExtraRequestData* extra_data =
211 static_cast<TestShellExtraRequestData*>(failed_request.GetExtraData());
212 bool replace = extra_data && extra_data->pending_page_id != -1;
213
214 scoped_ptr<WebRequest> request(failed_request.Clone());
215 request->SetURL(GURL("testshell-error:"));
216
217 std::string error_text =
218 StringPrintf("Error loading url: %d", error.GetErrorCode());
219
220 frame->LoadAlternateHTMLString(request.get(), error_text,
221 error.GetFailedURL(), replace);
222 }
223
224 void TestWebViewDelegate::DidCommitLoadForFrame(WebView* webview,
225 WebFrame* frame,
226 bool is_new_navigation) {
227 if (shell_->ShouldDumpFrameLoadCallbacks()) {
228 printf("%S - didCommitLoadForFrame\n",
229 GetFrameDescription(frame).c_str());
230 }
231
232 UpdateForCommittedLoad(frame, is_new_navigation);
233 }
234
235 void TestWebViewDelegate::DidReceiveTitle(WebView* webview,
236 const std::wstring& title,
237 WebFrame* frame) {
238 if (shell_->ShouldDumpFrameLoadCallbacks()) {
239 printf("%S - didReceiveTitle\n",
240 GetFrameDescription(frame).c_str());
241 }
242
243 if (shell_->ShouldDumpTitleChanges()) {
244 printf("TITLE CHANGED: %S\n", title.c_str());
245 }
246 gtk_window_set_title(GTK_WINDOW(shell_->mainWnd()), WideToUTF8(title).c_str()) ;
247 }
248
249 void TestWebViewDelegate::DidFinishLoadForFrame(WebView* webview,
250 WebFrame* frame) {
251 if (shell_->ShouldDumpFrameLoadCallbacks()) {
252 printf("%S - didFinishLoadForFrame\n",
253 GetFrameDescription(frame).c_str());
254 }
255
256 UpdateAddressBar(webview);
257 LocationChangeDone(frame->GetDataSource());
258 }
259
260 void TestWebViewDelegate::DidFailLoadWithError(WebView* webview,
261 const WebError& error,
262 WebFrame* frame) {
263 if (shell_->ShouldDumpFrameLoadCallbacks()) {
264 printf("%S - didFailLoadWithError\n",
265 GetFrameDescription(frame).c_str());
266 }
267
268 if (page_is_loading_)
269 DidStopLoading(webview);
270 LocationChangeDone(frame->GetDataSource());
271 }
272
273 void TestWebViewDelegate::DidFinishDocumentLoadForFrame(WebView* webview,
274 WebFrame* frame) {
275 if (shell_->ShouldDumpFrameLoadCallbacks()) {
276 printf("%S - didFinishDocumentLoadForFrame\n",
277 GetFrameDescription(frame).c_str());
278 }
279 }
280
281 void TestWebViewDelegate::DidHandleOnloadEventsForFrame(WebView* webview,
282 WebFrame* frame) {
283 if (shell_->ShouldDumpFrameLoadCallbacks()) {
284 printf("%S - didHandleOnloadEventsForFrame\n",
285 GetFrameDescription(frame).c_str());
286 }
287 }
288
289 void TestWebViewDelegate::DidChangeLocationWithinPageForFrame(
290 WebView* webview, WebFrame* frame, bool is_new_navigation) {
291 if (shell_->ShouldDumpFrameLoadCallbacks()) {
292 printf("%S - didChangeLocationWithinPageForFrame\n",
293 GetFrameDescription(frame).c_str());
294 }
295
296 UpdateForCommittedLoad(frame, is_new_navigation);
297 }
298
299 void TestWebViewDelegate::DidReceiveIconForFrame(WebView* webview,
300 WebFrame* frame) {
301 if (shell_->ShouldDumpFrameLoadCallbacks()) {
302 printf("%S - didReceiveIconForFrame\n",
303 GetFrameDescription(frame).c_str());
304 }
305 }
306
307 void TestWebViewDelegate::WillPerformClientRedirect(
308 WebView* webview, WebFrame* frame, const std::wstring& dest_url,
309 unsigned int delay_seconds, unsigned int fire_date) {
310 if (shell_->ShouldDumpFrameLoadCallbacks()) {
311 // TODO: prettyprint the url?
312 printf("%S - willPerformClientRedirectToURL: %S\n",
313 GetFrameDescription(frame).c_str(), dest_url.c_str());
314 }
315 }
316
317 void TestWebViewDelegate::DidCancelClientRedirect(WebView* webview,
318 WebFrame* frame) {
319 if (shell_->ShouldDumpFrameLoadCallbacks()) {
320 printf("%S - didCancelClientRedirectForFrame\n",
321 GetFrameDescription(frame).c_str());
322 }
323 }
324
325 void TestWebViewDelegate::AddMessageToConsole(WebView* webview,
326 const std::wstring& message,
327 unsigned int line_no,
328 const std::wstring& source_id) {
329 if (shell_->interactive()) {
330 logging::LogMessage("CONSOLE", 0).stream() << "\""
331 << message.c_str()
332 << ",\" source: "
333 << source_id.c_str()
334 << "("
335 << line_no
336 << ")";
337 } else {
338 // This matches win DumpRenderTree's UIDelegate.cpp.
339 std::wstring new_message = message;
340 if (!message.empty()) {
341 new_message = message;
342 size_t file_protocol = new_message.find(L"file://");
343 if (file_protocol != std::wstring::npos) {
344 new_message = new_message.substr(0, file_protocol) + new_message;
345 // UrlSuitableForTestResult(new_message);
346 }
347 }
348
349 std::string utf8 = WideToUTF8(new_message);
350 printf("CONSOLE MESSAGE: line %d: %s\n", line_no, utf8.c_str());
351 }
352 }
353
354 void TestWebViewDelegate::RunJavaScriptAlert(WebView* webview,
355 const std::wstring& message) {
356 if (shell_->interactive()) {
357 NOTIMPLEMENTED();
358 } else {
359 std::string utf8 = WideToUTF8(message);
360 printf("ALERT: %s\n", utf8.c_str());
361 }
362 }
363
364 bool TestWebViewDelegate::RunJavaScriptConfirm(WebView* webview,
365 const std::wstring& message) {
366 if (!shell_->interactive()) {
367 // When running tests, write to stdout.
368 std::string utf8 = WideToUTF8(message);
369 printf("CONFIRM: %s\n", utf8.c_str());
370 return true;
371 }
372 return false;
373 }
374
375 bool TestWebViewDelegate::RunJavaScriptPrompt(WebView* webview,
376 const std::wstring& message, const std::wstring& default_value,
377 std::wstring* result) {
378 if (!shell_->interactive()) {
379 // When running tests, write to stdout.
380 std::string utf8_message = WideToUTF8(message);
381 std::string utf8_default_value = WideToUTF8(default_value);
382 printf("PROMPT: %s, default text: %s\n", utf8_message.c_str(),
383 utf8_default_value.c_str());
384 return true;
385 }
386 return false;
387 } 44 }
388 45
389 void TestWebViewDelegate::StartDragging(WebView* webview, 46 void TestWebViewDelegate::StartDragging(WebView* webview,
390 const WebDropData& drop_data) { 47 const WebDropData& drop_data) {
391 } 48 NOTIMPLEMENTED();
392
393 void TestWebViewDelegate::ShowContextMenu(WebView* webview,
394 ContextNode::Type type,
395 int x,
396 int y,
397 const GURL& link_url,
398 const GURL& image_url,
399 const GURL& page_url,
400 const GURL& frame_url,
401 const std::wstring& selection_text,
402 const std::wstring& misspelled_word,
403 int edit_flags,
404 const std::string& security_info) {
405 CapturedContextMenuEvent context(type, x, y);
406 captured_context_menu_events_.push_back(context);
407 }
408
409 // The output from these methods in non-interactive mode should match that
410 // expected by the layout tests. See EditingDelegate.m in DumpRenderTree.
411 bool TestWebViewDelegate::ShouldBeginEditing(WebView* webview,
412 std::wstring range) {
413 if (shell_->ShouldDumpEditingCallbacks()) {
414 std::string utf8 = WideToUTF8(range);
415 printf("EDITING DELEGATE: shouldBeginEditingInDOMRange:%s\n",
416 utf8.c_str());
417 }
418 return shell_->AcceptsEditing();
419 }
420
421 bool TestWebViewDelegate::ShouldEndEditing(WebView* webview,
422 std::wstring range) {
423 if (shell_->ShouldDumpEditingCallbacks()) {
424 std::string utf8 = WideToUTF8(range);
425 printf("EDITING DELEGATE: shouldEndEditingInDOMRange:%s\n",
426 utf8.c_str());
427 }
428 return shell_->AcceptsEditing();
429 }
430
431 bool TestWebViewDelegate::ShouldInsertNode(WebView* webview,
432 std::wstring node,
433 std::wstring range,
434 std::wstring action) {
435 if (shell_->ShouldDumpEditingCallbacks()) {
436 std::string utf8_node = WideToUTF8(node);
437 std::string utf8_range = WideToUTF8(range);
438 std::string utf8_action = WideToUTF8(action);
439 printf("EDITING DELEGATE: shouldInsertNode:%s "
440 "replacingDOMRange:%s givenAction:%s\n",
441 utf8_node.c_str(), utf8_range.c_str(), utf8_action.c_str());
442 }
443 return shell_->AcceptsEditing();
444 }
445
446 bool TestWebViewDelegate::ShouldInsertText(WebView* webview,
447 std::wstring text,
448 std::wstring range,
449 std::wstring action) {
450 if (shell_->ShouldDumpEditingCallbacks()) {
451 std::string utf8_text = WideToUTF8(text);
452 std::string utf8_range = WideToUTF8(range);
453 std::string utf8_action = WideToUTF8(action);
454 printf("EDITING DELEGATE: shouldInsertText:%s "
455 "replacingDOMRange:%s givenAction:%s\n",
456 utf8_text.c_str(), utf8_range.c_str(), utf8_action.c_str());
457 }
458 return shell_->AcceptsEditing();
459 }
460
461 bool TestWebViewDelegate::ShouldChangeSelectedRange(WebView* webview,
462 std::wstring fromRange,
463 std::wstring toRange,
464 std::wstring affinity,
465 bool stillSelecting) {
466 if (shell_->ShouldDumpEditingCallbacks()) {
467 std::string utf8_from = WideToUTF8(fromRange);
468 std::string utf8_to = WideToUTF8(toRange);
469 std::string utf8_affinity = WideToUTF8(affinity);
470 printf("EDITING DELEGATE: shouldChangeSelectedDOMRange:%s "
471 "toDOMRange:%s affinity:%s stillSelecting:%s\n",
472 utf8_from.c_str(),
473 utf8_to.c_str(),
474 utf8_affinity.c_str(),
475 (stillSelecting ? "TRUE" : "FALSE"));
476 }
477 return shell_->AcceptsEditing();
478 }
479
480 bool TestWebViewDelegate::ShouldDeleteRange(WebView* webview,
481 std::wstring range) {
482 if (shell_->ShouldDumpEditingCallbacks()) {
483 std::string utf8 = WideToUTF8(range);
484 printf("EDITING DELEGATE: shouldDeleteDOMRange:%s\n", utf8.c_str());
485 }
486 return shell_->AcceptsEditing();
487 }
488
489 bool TestWebViewDelegate::ShouldApplyStyle(WebView* webview,
490 std::wstring style,
491 std::wstring range) {
492 if (shell_->ShouldDumpEditingCallbacks()) {
493 std::string utf8_style = WideToUTF8(style);
494 std::string utf8_range = WideToUTF8(range);
495 printf("EDITING DELEGATE: shouldApplyStyle:%s toElementsInDOMRange:%s\n",
496 utf8_style.c_str(), utf8_range.c_str());
497 }
498 return shell_->AcceptsEditing();
499 }
500
501 bool TestWebViewDelegate::SmartInsertDeleteEnabled() {
502 return true;
503 }
504
505 void TestWebViewDelegate::DidBeginEditing() {
506 if (shell_->ShouldDumpEditingCallbacks()) {
507 printf("EDITING DELEGATE: "
508 "webViewDidBeginEditing:WebViewDidBeginEditingNotification\n");
509 }
510 }
511
512 void TestWebViewDelegate::DidChangeSelection() {
513 if (shell_->ShouldDumpEditingCallbacks()) {
514 printf("EDITING DELEGATE: "
515 "webViewDidChangeSelection:WebViewDidChangeSelectionNotification\n");
516 }
517 }
518
519 void TestWebViewDelegate::DidChangeContents() {
520 if (shell_->ShouldDumpEditingCallbacks()) {
521 printf("EDITING DELEGATE: "
522 "webViewDidChange:WebViewDidChangeNotification\n");
523 }
524 }
525
526 void TestWebViewDelegate::DidEndEditing() {
527 if (shell_->ShouldDumpEditingCallbacks()) {
528 printf("EDITING DELEGATE: "
529 "webViewDidEndEditing:WebViewDidEndEditingNotification\n");
530 }
531 }
532
533 WebHistoryItem* TestWebViewDelegate::GetHistoryEntryAtOffset(int offset) {
534 TestNavigationEntry* entry = static_cast<TestNavigationEntry*>(
535 shell_->navigation_controller()->GetEntryAtOffset(offset));
536 if (!entry)
537 return NULL;
538
539 return entry->GetHistoryItem();
540 }
541
542 int TestWebViewDelegate::GetHistoryBackListCount() {
543 int current_index =
544 shell_->navigation_controller()->GetLastCommittedEntryIndex();
545 return current_index;
546 }
547
548 int TestWebViewDelegate::GetHistoryForwardListCount() {
549 int current_index =
550 shell_->navigation_controller()->GetLastCommittedEntryIndex();
551 return shell_->navigation_controller()->GetEntryCount() - current_index - 1;
552 }
553
554 void TestWebViewDelegate::SetUserStyleSheetEnabled(bool is_enabled) {
555 WebPreferences* prefs = shell_->GetWebPreferences();
556 prefs->user_style_sheet_enabled = is_enabled;
557 shell_->webView()->SetPreferences(*prefs);
558 }
559
560 void TestWebViewDelegate::SetUserStyleSheetLocation(const GURL& location) {
561 WebPreferences* prefs = shell_->GetWebPreferences();
562 prefs->user_style_sheet_location = location;
563 shell_->webView()->SetPreferences(*prefs);
564 }
565
566 // WebWidgetDelegate ---------------------------------------------------------
567
568 gfx::ViewHandle TestWebViewDelegate::GetContainingWindow(WebWidget* webwidget) {
569 if (WebWidgetHost* host = GetHostForWidget(webwidget))
570 return host->window_handle();
571
572 return NULL;
573 }
574
575 void TestWebViewDelegate::DidInvalidateRect(WebWidget* webwidget,
576 const gfx::Rect& rect) {
577 WebWidgetHost* host = GetHostForWidget(webwidget);
578 if (host)
579 host->DidInvalidateRect(rect);
580 }
581
582 void TestWebViewDelegate::DidScrollRect(WebWidget* webwidget, int dx, int dy,
583 const gfx::Rect& clip_rect) {
584 if (WebWidgetHost* host = GetHostForWidget(webwidget))
585 host->DidScrollRect(dx, dy, clip_rect);
586 } 49 }
587 50
588 void TestWebViewDelegate::Show(WebWidget* webview, 51 void TestWebViewDelegate::Show(WebWidget* webview,
589 WindowOpenDisposition disposition) { 52 WindowOpenDisposition disposition) {
53 NOTIMPLEMENTED();
590 } 54 }
591 55
592 void TestWebViewDelegate::CloseWidgetSoon(WebWidget* webwidget) { 56 void TestWebViewDelegate::CloseWidgetSoon(WebWidget* webwidget) {
593 NOTIMPLEMENTED(); 57 NOTIMPLEMENTED();
594 } 58 }
595 59
596 void TestWebViewDelegate::Focus(WebWidget* webwidget) {
597 if (WebWidgetHost* host = GetHostForWidget(webwidget))
598 shell_->SetFocus(host, true);
599 }
600
601 void TestWebViewDelegate::Blur(WebWidget* webwidget) {
602 if (WebWidgetHost* host = GetHostForWidget(webwidget))
603 shell_->SetFocus(host, false);
604 }
605
606 void TestWebViewDelegate::SetCursor(WebWidget* webwidget, 60 void TestWebViewDelegate::SetCursor(WebWidget* webwidget,
607 const WebCursor& cursor) { 61 const WebCursor& cursor) {
608 //TODO: Mac cursor handling 62 // TODO(port): GTK cursor handling.
tony 2008/11/09 18:07:50 Nit: NOTIMPLEMENTED()?
609 } 63 }
610 64
611 void TestWebViewDelegate::GetWindowRect(WebWidget* webwidget, 65 void TestWebViewDelegate::GetWindowRect(WebWidget* webwidget,
612 gfx::Rect* out_rect) { 66 gfx::Rect* out_rect) {
613 DCHECK(out_rect); 67 DCHECK(out_rect);
614 //if (WebWidgetHost* host = GetHostForWidget(webwidget)) { 68 //if (WebWidgetHost* host = GetHostForWidget(webwidget)) {
615 NOTIMPLEMENTED(); 69 NOTIMPLEMENTED();
616 //} 70 //}
617 } 71 }
618 72
619 void TestWebViewDelegate::SetWindowRect(WebWidget* webwidget, 73 void TestWebViewDelegate::SetWindowRect(WebWidget* webwidget,
620 const gfx::Rect& rect) { 74 const gfx::Rect& rect) {
621 // TODO: Mac window movement 75 // TODO(port): window movement
622 if (webwidget == shell_->webView()) { 76 if (webwidget == shell_->webView()) {
623 // ignored 77 // ignored
624 } else if (webwidget == shell_->popup()) { 78 } else if (webwidget == shell_->popup()) {
625 // MoveWindow(shell_->popupWnd(), 79 // MoveWindow(shell_->popupWnd(),
tony 2008/11/09 18:07:50 NOTIMPLEMENTED?
626 // rect.x(), rect.y(), rect.width(), rect.height(), FALSE); 80 // rect.x(), rect.y(), rect.width(), rect.height(), FALSE);
627 } 81 }
628 } 82 }
629 83
630 void TestWebViewDelegate::GetRootWindowRect(WebWidget* webwidget, 84 void TestWebViewDelegate::GetRootWindowRect(WebWidget* webwidget,
631 gfx::Rect* out_rect) { 85 gfx::Rect* out_rect) {
632 //if (WebWidgetHost* host = GetHostForWidget(webwidget)) { 86 //if (WebWidgetHost* host = GetHostForWidget(webwidget)) {
633 NOTIMPLEMENTED(); 87 NOTIMPLEMENTED();
634 //} 88 //}
635 } 89 }
636 90
637 void TestWebViewDelegate::DidMove(WebWidget* webwidget,
638 const WebPluginGeometry& move) {
639 // TODO: uncomment when Mac plugins are working
640 // WebPluginDelegateImpl::MoveWindow(
641 // move.window, move.window_rect, move.clip_rect, move.visible); */
642 }
643
644 void TestWebViewDelegate::RegisterDragDrop() {
645 // TODO: uncomment when Mac drag and drop is working
646 // DCHECK(!drop_delegate_);
647 // drop_delegate_ = new TestDropDelegate(shell_->webViewWnd(),
648 // shell_->webView());
649 }
650
651 void TestWebViewDelegate::RunModal(WebWidget* webwidget) { 91 void TestWebViewDelegate::RunModal(WebWidget* webwidget) {
652 // TODO(pinkerton): implement me 92 NOTIMPLEMENTED();
653 }
654
655 bool TestWebViewDelegate::IsHidden() {
656 return false;
657 } 93 }
658 94
659 // Private methods ----------------------------------------------------------- 95 // Private methods -----------------------------------------------------------
660 96
661 void TestWebViewDelegate::UpdateAddressBar(WebView* webView) { 97 void TestWebViewDelegate::SetPageTitle(const std::wstring& title) {
662 WebFrame* mainFrame = webView->GetMainFrame(); 98 gtk_window_set_title(GTK_WINDOW(shell_->mainWnd()),
663 99 ("Test Shell - " + WideToUTF8(title)).c_str());
664 WebDataSource* dataSource = mainFrame->GetDataSource();
665 if (!dataSource)
666 dataSource = mainFrame->GetProvisionalDataSource();
667 if (!dataSource)
668 return;
669
670 std::string frameURL = dataSource->GetRequest().GetMainDocumentURL().spec();
671 LOG(INFO) << " -- Address bar " << frameURL;
672
673 gtk_entry_set_text(GTK_ENTRY(shell_->editWnd()), frameURL.c_str());
674 } 100 }
675 101
676 void TestWebViewDelegate::LocationChangeDone(WebDataSource* data_source) { 102 void TestWebViewDelegate::SetAddressBarURL(const GURL& url) {
677 if (data_source->GetWebFrame() == top_loading_frame_) { 103 gtk_entry_set_text(GTK_ENTRY(shell_->editWnd()), url.spec().c_str());
678 top_loading_frame_ = NULL;
679 NOTIMPLEMENTED();
680
681 if (!shell_->interactive())
682 shell_->layout_test_controller()->LocationChangeDone();
683 }
684 } 104 }
685
686 WebWidgetHost* TestWebViewDelegate::GetHostForWidget(WebWidget* webwidget) {
687 if (webwidget == shell_->webView())
688 return shell_->webViewHost();
689 if (webwidget == shell_->popup())
690 return shell_->popupHost();
691 return NULL;
692 }
693
694 void TestWebViewDelegate::UpdateForCommittedLoad(WebFrame* frame,
695 bool is_new_navigation) {
696 WebView* webview = shell_->webView();
697
698 // Code duplicated from RenderView::DidCommitLoadForFrame.
699 const WebRequest& request =
700 webview->GetMainFrame()->GetDataSource()->GetRequest();
701 TestShellExtraRequestData* extra_data =
702 static_cast<TestShellExtraRequestData*>(request.GetExtraData());
703
704 if (is_new_navigation) {
705 // New navigation.
706 UpdateSessionHistory(frame);
707 page_id_ = next_page_id_++;
708 } else if (extra_data && extra_data->pending_page_id != -1 &&
709 !extra_data->request_committed) {
710 // This is a successful session history navigation!
711 UpdateSessionHistory(frame);
712 page_id_ = extra_data->pending_page_id;
713 }
714
715 // Don't update session history multiple times.
716 if (extra_data)
717 extra_data->request_committed = true;
718
719 UpdateURL(frame);
720 }
721
722 void TestWebViewDelegate::UpdateURL(WebFrame* frame) {
723 WebDataSource* ds = frame->GetDataSource();
724 DCHECK(ds);
725
726 const WebRequest& request = ds->GetRequest();
727
728 scoped_ptr<TestNavigationEntry> entry(new TestNavigationEntry);
729
730 // Bug 654101: the referrer will be empty on https->http transitions. It
731 // would be nice if we could get the real referrer from somewhere.
732 entry->SetPageID(page_id_);
733 if (ds->HasUnreachableURL()) {
734 entry->SetURL(GURL(ds->GetUnreachableURL()));
735 } else {
736 entry->SetURL(GURL(request.GetURL()));
737 }
738
739 shell_->navigation_controller()->DidNavigateToEntry(entry.release());
740
741 last_page_id_updated_ = std::max(last_page_id_updated_, page_id_);
742 }
743
744 void TestWebViewDelegate::UpdateSessionHistory(WebFrame* frame) {
745 // If we have a valid page ID at this point, then it corresponds to the page
746 // we are navigating away from. Otherwise, this is the first navigation, so
747 // there is no past session history to record.
748 if (page_id_ == -1)
749 return;
750
751 TestNavigationEntry* entry = static_cast<TestNavigationEntry*>(
752 shell_->navigation_controller()->GetEntryWithPageID(page_id_));
753 if (!entry)
754 return;
755
756 GURL url;
757 std::wstring title;
758 std::string state;
759 if (!shell_->webView()->GetMainFrame()->
760 GetPreviousState(&url, &title, &state))
761 return;
762
763 entry->SetURL(url);
764 entry->SetTitle(title);
765 entry->SetContentState(state);
766 }
767
768 std::wstring TestWebViewDelegate::GetFrameDescription(WebFrame* webframe) {
769 std::wstring name = webframe->GetName();
770
771 if (webframe == shell_->webView()->GetMainFrame()) {
772 if (name.length())
773 return L"main frame \"" + name + L"\"";
774 else
775 return L"main frame";
776 } else {
777 if (name.length())
778 return L"frame \"" + name + L"\"";
779 else
780 return L"frame (anonymous)";
781 }
782 }
OLDNEW
« no previous file with comments | « webkit/tools/test_shell/SConscript ('k') | webkit/tools/test_shell/gtk/webview_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698