OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-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 contains the implementation of TestWebViewDelegate, which serves | 5 // This file contains the implementation of TestWebViewDelegate, which serves |
6 // as the WebViewDelegate for the TestShellWebHost. The host is expected to | 6 // as the WebViewDelegate for the TestShellWebHost. The host is expected to |
7 // have initialized a MessageLoop before these methods are called. | 7 // have initialized a MessageLoop before these methods are called. |
8 | 8 |
9 #include "webkit/tools/test_shell/test_webview_delegate.h" | 9 #include "webkit/tools/test_shell/test_webview_delegate.h" |
10 | 10 |
11 #include <objidl.h> | 11 #include "base/file_util.h" |
12 #include <shlobj.h> | |
13 #include <shlwapi.h> | |
14 | |
15 #include "base/gfx/point.h" | 12 #include "base/gfx/point.h" |
16 #include "base/message_loop.h" | 13 #include "base/message_loop.h" |
17 #include "base/string_util.h" | 14 #include "base/string_util.h" |
18 #include "base/trace_event.h" | 15 #include "base/trace_event.h" |
19 #include "net/base/net_errors.h" | 16 #include "net/base/net_errors.h" |
20 #include "webkit/glue/webdatasource.h" | 17 #include "webkit/glue/webdatasource.h" |
21 #include "webkit/glue/webdropdata.h" | 18 #include "webkit/glue/webdropdata.h" |
22 #include "webkit/glue/weberror.h" | 19 #include "webkit/glue/weberror.h" |
23 #include "webkit/glue/webframe.h" | 20 #include "webkit/glue/webframe.h" |
24 #include "webkit/glue/webpreferences.h" | 21 #include "webkit/glue/webpreferences.h" |
25 #include "webkit/glue/weburlrequest.h" | 22 #include "webkit/glue/weburlrequest.h" |
26 #include "webkit/glue/webkit_glue.h" | 23 #include "webkit/glue/webkit_glue.h" |
27 #include "webkit/glue/webview.h" | 24 #include "webkit/glue/webview.h" |
28 #include "webkit/glue/plugins/plugin_list.h" | 25 #include "webkit/glue/plugins/plugin_list.h" |
29 #include "webkit/glue/plugins/webplugin_delegate_impl.h" | |
30 #include "webkit/glue/window_open_disposition.h" | 26 #include "webkit/glue/window_open_disposition.h" |
31 #include "webkit/tools/test_shell/drag_delegate.h" | |
32 #include "webkit/tools/test_shell/drop_delegate.h" | |
33 #include "webkit/tools/test_shell/test_navigation_controller.h" | 27 #include "webkit/tools/test_shell/test_navigation_controller.h" |
34 #include "webkit/tools/test_shell/test_shell.h" | 28 #include "webkit/tools/test_shell/test_shell.h" |
35 | 29 |
| 30 #if defined(OS_WIN) |
| 31 // TODO(port): make these files work everywhere. |
| 32 #include "webkit/glue/plugins/webplugin_delegate_impl.h" |
| 33 #include "webkit/tools/test_shell/drag_delegate.h" |
| 34 #include "webkit/tools/test_shell/drop_delegate.h" |
| 35 #endif |
| 36 |
36 namespace { | 37 namespace { |
37 | 38 |
38 static int next_page_id_ = 1; | |
39 | |
40 // Used to write a platform neutral file:/// URL by only taking the filename | 39 // Used to write a platform neutral file:/// URL by only taking the filename |
41 // (e.g., converts "file:///tmp/foo.txt" to just "foo.txt"). | 40 // (e.g., converts "file:///tmp/foo.txt" to just "foo.txt"). |
42 std::wstring UrlSuitableForTestResult(const std::wstring& url) { | 41 std::wstring UrlSuitableForTestResult(const std::wstring& url) { |
43 if (url.empty() || std::wstring::npos == url.find(L"file://")) | 42 if (url.empty() || std::wstring::npos == url.find(L"file://")) |
44 return url; | 43 return url; |
45 | 44 |
46 return PathFindFileNameW(url.c_str()); | 45 return file_util::GetFilenameFromPath(url); |
47 } | 46 } |
48 | 47 |
49 // Adds a file called "DRTFakeFile" to |data_object| (CF_HDROP). Use to fake | 48 int next_page_id_ = 1; |
50 // dragging a file. | |
51 void AddDRTFakeFileToDataObject(IDataObject* data_object) { | |
52 STGMEDIUM medium = {0}; | |
53 medium.tymed = TYMED_HGLOBAL; | |
54 | |
55 const char filename[] = "DRTFakeFile"; | |
56 const int filename_len = arraysize(filename); | |
57 | |
58 // Allocate space for the DROPFILES struct, filename, and 2 null characters. | |
59 medium.hGlobal = GlobalAlloc(GPTR, sizeof(DROPFILES) + filename_len + 2); | |
60 DCHECK(medium.hGlobal); | |
61 DROPFILES* drop_files = static_cast<DROPFILES*>(GlobalLock(medium.hGlobal)); | |
62 drop_files->pFiles = sizeof(DROPFILES); | |
63 drop_files->fWide = 0; // Filenames are ascii | |
64 strcpy_s(reinterpret_cast<char*>(drop_files) + sizeof(DROPFILES), | |
65 filename_len, filename); | |
66 GlobalUnlock(medium.hGlobal); | |
67 | |
68 FORMATETC file_desc_fmt = {CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; | |
69 data_object->SetData(&file_desc_fmt, &medium, TRUE); | |
70 } | |
71 | 49 |
72 } // namespace | 50 } // namespace |
73 | 51 |
74 // WebViewDelegate ----------------------------------------------------------- | 52 // WebViewDelegate ----------------------------------------------------------- |
75 | 53 |
76 TestWebViewDelegate::~TestWebViewDelegate() { | |
77 if (custom_cursor_) | |
78 DestroyIcon(custom_cursor_); | |
79 RevokeDragDrop(shell_->webViewWnd()); | |
80 } | |
81 | |
82 WebView* TestWebViewDelegate::CreateWebView(WebView* webview, | 54 WebView* TestWebViewDelegate::CreateWebView(WebView* webview, |
83 bool user_gesture) { | 55 bool user_gesture) { |
84 return shell_->CreateWebView(webview); | 56 return shell_->CreateWebView(webview); |
85 } | 57 } |
86 | 58 |
87 WebWidget* TestWebViewDelegate::CreatePopupWidget(WebView* webview) { | 59 WebWidget* TestWebViewDelegate::CreatePopupWidget(WebView* webview) { |
88 return shell_->CreatePopupWidget(webview); | 60 return shell_->CreatePopupWidget(webview); |
89 } | 61 } |
90 | 62 |
91 WebPluginDelegate* TestWebViewDelegate::CreatePluginDelegate( | |
92 WebView* webview, | |
93 const GURL& url, | |
94 const std::string& mime_type, | |
95 const std::string& clsid, | |
96 std::string* actual_mime_type) { | |
97 HWND hwnd = GetContainingWindow(webview); | |
98 if (!hwnd) | |
99 return NULL; | |
100 | |
101 bool allow_wildcard = true; | |
102 WebPluginInfo info; | |
103 if (!NPAPI::PluginList::Singleton()->GetPluginInfo(url, mime_type, clsid, | |
104 allow_wildcard, &info, | |
105 actual_mime_type)) | |
106 return NULL; | |
107 | |
108 if (actual_mime_type && !actual_mime_type->empty()) | |
109 return WebPluginDelegateImpl::Create(info.file, *actual_mime_type, hwnd); | |
110 else | |
111 return WebPluginDelegateImpl::Create(info.file, mime_type, hwnd); | |
112 } | |
113 | |
114 void TestWebViewDelegate::OpenURL(WebView* webview, const GURL& url, | 63 void TestWebViewDelegate::OpenURL(WebView* webview, const GURL& url, |
115 const GURL& referrer, | 64 const GURL& referrer, |
116 WindowOpenDisposition disposition) { | 65 WindowOpenDisposition disposition) { |
117 DCHECK_NE(disposition, CURRENT_TAB); // No code for this | 66 DCHECK_NE(disposition, CURRENT_TAB); // No code for this |
118 if (disposition == SUPPRESS_OPEN) | 67 if (disposition == SUPPRESS_OPEN) |
119 return; | 68 return; |
120 TestShell* shell; | 69 TestShell* shell = NULL; |
121 if (TestShell::CreateNewWindow(UTF8ToWide(url.spec()), &shell)) | 70 if (TestShell::CreateNewWindow(UTF8ToWide(url.spec()), &shell)) |
122 shell->Show(shell->webView(), disposition); | 71 shell->Show(shell->webView(), disposition); |
123 } | 72 } |
124 | 73 |
125 void TestWebViewDelegate::DidStartLoading(WebView* webview) { | 74 void TestWebViewDelegate::DidStartLoading(WebView* webview) { |
126 if (page_is_loading_) { | 75 if (page_is_loading_) { |
127 LOG(ERROR) << "DidStartLoading called while loading"; | 76 LOG(ERROR) << "DidStartLoading called while loading"; |
128 return; | 77 return; |
129 } | 78 } |
130 page_is_loading_ = true; | 79 page_is_loading_ = true; |
(...skipping 14 matching lines...) Expand all Loading... |
145 WindowOpenDisposition TestWebViewDelegate::DispositionForNavigationAction( | 94 WindowOpenDisposition TestWebViewDelegate::DispositionForNavigationAction( |
146 WebView* webview, | 95 WebView* webview, |
147 WebFrame* frame, | 96 WebFrame* frame, |
148 const WebRequest* request, | 97 const WebRequest* request, |
149 WebNavigationType type, | 98 WebNavigationType type, |
150 WindowOpenDisposition disposition, | 99 WindowOpenDisposition disposition, |
151 bool is_redirect) { | 100 bool is_redirect) { |
152 if (is_custom_policy_delegate_) { | 101 if (is_custom_policy_delegate_) { |
153 std::wstring frame_name = frame->GetName(); | 102 std::wstring frame_name = frame->GetName(); |
154 printf("Policy delegate: attempt to load %s\n", | 103 printf("Policy delegate: attempt to load %s\n", |
155 request->GetURL().spec().c_str()); | 104 request->GetURL().spec().c_str()); |
156 return IGNORE_ACTION; | 105 return IGNORE_ACTION; |
157 } else { | 106 } else { |
158 return WebViewDelegate::DispositionForNavigationAction( | 107 return WebViewDelegate::DispositionForNavigationAction( |
159 webview, frame, request, type, disposition, is_redirect); | 108 webview, frame, request, type, disposition, is_redirect); |
160 } | 109 } |
161 } | 110 } |
162 | 111 |
163 void TestWebViewDelegate::SetCustomPolicyDelegate(bool isCustom) { | 112 void TestWebViewDelegate::SetCustomPolicyDelegate(bool isCustom) { |
164 is_custom_policy_delegate_ = isCustom; | 113 is_custom_policy_delegate_ = isCustom; |
165 } | 114 } |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 const std::wstring& title, | 247 const std::wstring& title, |
299 WebFrame* frame) { | 248 WebFrame* frame) { |
300 if (shell_->ShouldDumpFrameLoadCallbacks()) { | 249 if (shell_->ShouldDumpFrameLoadCallbacks()) { |
301 printf("%S - didReceiveTitle\n", | 250 printf("%S - didReceiveTitle\n", |
302 GetFrameDescription(frame).c_str()); | 251 GetFrameDescription(frame).c_str()); |
303 } | 252 } |
304 | 253 |
305 if (shell_->ShouldDumpTitleChanges()) { | 254 if (shell_->ShouldDumpTitleChanges()) { |
306 printf("TITLE CHANGED: %S\n", title.c_str()); | 255 printf("TITLE CHANGED: %S\n", title.c_str()); |
307 } | 256 } |
| 257 |
| 258 SetPageTitle(title); |
308 } | 259 } |
309 | 260 |
310 void TestWebViewDelegate::DidFinishLoadForFrame(WebView* webview, | 261 void TestWebViewDelegate::DidFinishLoadForFrame(WebView* webview, |
311 WebFrame* frame) { | 262 WebFrame* frame) { |
312 TRACE_EVENT_END("frame.load", this, frame->GetURL().spec()); | 263 TRACE_EVENT_END("frame.load", this, frame->GetURL().spec()); |
313 if (shell_->ShouldDumpFrameLoadCallbacks()) { | 264 if (shell_->ShouldDumpFrameLoadCallbacks()) { |
314 printf("%S - didFinishLoadForFrame\n", | 265 printf("%S - didFinishLoadForFrame\n", |
315 GetFrameDescription(frame).c_str()); | 266 GetFrameDescription(frame).c_str()); |
316 } | 267 } |
317 | 268 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 } | 368 } |
418 | 369 |
419 std::string utf8 = WideToUTF8(new_message); | 370 std::string utf8 = WideToUTF8(new_message); |
420 printf("CONSOLE MESSAGE: line %d: %s\n", line_no, utf8.c_str()); | 371 printf("CONSOLE MESSAGE: line %d: %s\n", line_no, utf8.c_str()); |
421 } | 372 } |
422 } | 373 } |
423 | 374 |
424 void TestWebViewDelegate::RunJavaScriptAlert(WebView* webview, | 375 void TestWebViewDelegate::RunJavaScriptAlert(WebView* webview, |
425 const std::wstring& message) { | 376 const std::wstring& message) { |
426 if (shell_->interactive()) { | 377 if (shell_->interactive()) { |
427 MessageBox(shell_->mainWnd(), | 378 ShowJavaScriptAlert(message); |
428 message.c_str(), | |
429 L"JavaScript Alert", | |
430 MB_OK); | |
431 } else { | 379 } else { |
432 std::string utf8 = WideToUTF8(message); | 380 std::string utf8 = WideToUTF8(message); |
433 printf("ALERT: %s\n", utf8.c_str()); | 381 printf("ALERT: %s\n", utf8.c_str()); |
434 } | 382 } |
435 } | 383 } |
436 | 384 |
437 bool TestWebViewDelegate::RunJavaScriptConfirm(WebView* webview, | 385 bool TestWebViewDelegate::RunJavaScriptConfirm(WebView* webview, |
438 const std::wstring& message) { | 386 const std::wstring& message) { |
439 if (!shell_->interactive()) { | 387 if (!shell_->interactive()) { |
440 // When running tests, write to stdout. | 388 // When running tests, write to stdout. |
(...skipping 11 matching lines...) Expand all Loading... |
452 // When running tests, write to stdout. | 400 // When running tests, write to stdout. |
453 std::string utf8_message = WideToUTF8(message); | 401 std::string utf8_message = WideToUTF8(message); |
454 std::string utf8_default_value = WideToUTF8(default_value); | 402 std::string utf8_default_value = WideToUTF8(default_value); |
455 printf("PROMPT: %s, default text: %s\n", utf8_message.c_str(), | 403 printf("PROMPT: %s, default text: %s\n", utf8_message.c_str(), |
456 utf8_default_value.c_str()); | 404 utf8_default_value.c_str()); |
457 return true; | 405 return true; |
458 } | 406 } |
459 return false; | 407 return false; |
460 } | 408 } |
461 | 409 |
462 void TestWebViewDelegate::StartDragging(WebView* webview, | |
463 const WebDropData& drop_data) { | |
464 | |
465 if (!drag_delegate_) | |
466 drag_delegate_ = new TestDragDelegate(shell_->webViewWnd(), | |
467 shell_->webView()); | |
468 if (webkit_glue::IsLayoutTestMode()) { | |
469 if (shell_->layout_test_controller()->ShouldAddFileToPasteboard()) { | |
470 // Add a file called DRTFakeFile to the drag&drop clipboard. | |
471 AddDRTFakeFileToDataObject(drop_data.data_object); | |
472 } | |
473 | |
474 // When running a test, we need to fake a drag drop operation otherwise | |
475 // Windows waits for real mouse events to know when the drag is over. | |
476 EventSendingController::DoDragDrop(drop_data.data_object); | |
477 } else { | |
478 const DWORD ok_effect = DROPEFFECT_COPY | DROPEFFECT_LINK | DROPEFFECT_MOVE; | |
479 DWORD effect; | |
480 HRESULT res = DoDragDrop(drop_data.data_object, drag_delegate_.get(), | |
481 ok_effect, &effect); | |
482 DCHECK(DRAGDROP_S_DROP == res || DRAGDROP_S_CANCEL == res); | |
483 } | |
484 webview->DragSourceSystemDragEnded(); | |
485 } | |
486 | |
487 void TestWebViewDelegate::ShowContextMenu(WebView* webview, | 410 void TestWebViewDelegate::ShowContextMenu(WebView* webview, |
488 ContextNode::Type type, | 411 ContextNode::Type type, |
489 int x, | 412 int x, |
490 int y, | 413 int y, |
491 const GURL& link_url, | 414 const GURL& link_url, |
492 const GURL& image_url, | 415 const GURL& image_url, |
493 const GURL& page_url, | 416 const GURL& page_url, |
494 const GURL& frame_url, | 417 const GURL& frame_url, |
495 const std::wstring& selection_text, | 418 const std::wstring& selection_text, |
496 const std::wstring& misspelled_word, | 419 const std::wstring& misspelled_word, |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
653 | 576 |
654 void TestWebViewDelegate::SetUserStyleSheetLocation(const GURL& location) { | 577 void TestWebViewDelegate::SetUserStyleSheetLocation(const GURL& location) { |
655 WebPreferences* prefs = shell_->GetWebPreferences(); | 578 WebPreferences* prefs = shell_->GetWebPreferences(); |
656 prefs->user_style_sheet_enabled = true; | 579 prefs->user_style_sheet_enabled = true; |
657 prefs->user_style_sheet_location = location; | 580 prefs->user_style_sheet_location = location; |
658 shell_->webView()->SetPreferences(*prefs); | 581 shell_->webView()->SetPreferences(*prefs); |
659 } | 582 } |
660 | 583 |
661 // WebWidgetDelegate --------------------------------------------------------- | 584 // WebWidgetDelegate --------------------------------------------------------- |
662 | 585 |
663 HWND TestWebViewDelegate::GetContainingWindow(WebWidget* webwidget) { | 586 gfx::ViewHandle TestWebViewDelegate::GetContainingWindow(WebWidget* webwidget) { |
664 if (WebWidgetHost* host = GetHostForWidget(webwidget)) | 587 if (WebWidgetHost* host = GetHostForWidget(webwidget)) |
665 return host->window_handle(); | 588 return host->window_handle(); |
666 | 589 |
667 return NULL; | 590 return NULL; |
668 } | 591 } |
669 | 592 |
670 void TestWebViewDelegate::DidInvalidateRect(WebWidget* webwidget, | 593 void TestWebViewDelegate::DidInvalidateRect(WebWidget* webwidget, |
671 const gfx::Rect& rect) { | 594 const gfx::Rect& rect) { |
672 if (WebWidgetHost* host = GetHostForWidget(webwidget)) | 595 if (WebWidgetHost* host = GetHostForWidget(webwidget)) |
673 host->DidInvalidateRect(rect); | 596 host->DidInvalidateRect(rect); |
674 } | 597 } |
675 | 598 |
676 void TestWebViewDelegate::DidScrollRect(WebWidget* webwidget, int dx, int dy, | 599 void TestWebViewDelegate::DidScrollRect(WebWidget* webwidget, int dx, int dy, |
677 const gfx::Rect& clip_rect) { | 600 const gfx::Rect& clip_rect) { |
678 if (WebWidgetHost* host = GetHostForWidget(webwidget)) | 601 if (WebWidgetHost* host = GetHostForWidget(webwidget)) |
679 host->DidScrollRect(dx, dy, clip_rect); | 602 host->DidScrollRect(dx, dy, clip_rect); |
680 } | 603 } |
681 | 604 |
682 void TestWebViewDelegate::Show(WebWidget* webwidget, WindowOpenDisposition) { | |
683 if (webwidget == shell_->webView()) { | |
684 ShowWindow(shell_->mainWnd(), SW_SHOW); | |
685 UpdateWindow(shell_->mainWnd()); | |
686 } else if (webwidget == shell_->popup()) { | |
687 ShowWindow(shell_->popupWnd(), SW_SHOW); | |
688 UpdateWindow(shell_->popupWnd()); | |
689 } | |
690 } | |
691 | |
692 void TestWebViewDelegate::CloseWidgetSoon(WebWidget* webwidget) { | |
693 if (webwidget == shell_->webView()) { | |
694 PostMessage(shell_->mainWnd(), WM_CLOSE, 0, 0); | |
695 } else if (webwidget == shell_->popup()) { | |
696 shell_->ClosePopup(); | |
697 } | |
698 } | |
699 | |
700 void TestWebViewDelegate::Focus(WebWidget* webwidget) { | 605 void TestWebViewDelegate::Focus(WebWidget* webwidget) { |
701 if (WebWidgetHost* host = GetHostForWidget(webwidget)) | 606 if (WebWidgetHost* host = GetHostForWidget(webwidget)) |
702 shell_->SetFocus(host, true); | 607 shell_->SetFocus(host, true); |
703 } | 608 } |
704 | 609 |
705 void TestWebViewDelegate::Blur(WebWidget* webwidget) { | 610 void TestWebViewDelegate::Blur(WebWidget* webwidget) { |
706 if (WebWidgetHost* host = GetHostForWidget(webwidget)) | 611 if (WebWidgetHost* host = GetHostForWidget(webwidget)) |
707 shell_->SetFocus(host, false); | 612 shell_->SetFocus(host, false); |
708 } | 613 } |
709 | 614 |
710 void TestWebViewDelegate::SetCursor(WebWidget* webwidget, | |
711 const WebCursor& cursor) { | |
712 if (WebWidgetHost* host = GetHostForWidget(webwidget)) { | |
713 if (custom_cursor_) { | |
714 DestroyIcon(custom_cursor_); | |
715 custom_cursor_ = NULL; | |
716 } | |
717 if (cursor.IsCustom()) { | |
718 custom_cursor_ = cursor.GetCustomCursor(); | |
719 host->SetCursor(custom_cursor_); | |
720 } else { | |
721 HINSTANCE mod_handle = GetModuleHandle(NULL); | |
722 host->SetCursor(cursor.GetCursor(mod_handle)); | |
723 } | |
724 } | |
725 } | |
726 | |
727 void TestWebViewDelegate::GetWindowRect(WebWidget* webwidget, | |
728 gfx::Rect* out_rect) { | |
729 if (WebWidgetHost* host = GetHostForWidget(webwidget)) { | |
730 RECT rect; | |
731 ::GetWindowRect(host->window_handle(), &rect); | |
732 *out_rect = gfx::Rect(rect); | |
733 } | |
734 } | |
735 | |
736 void TestWebViewDelegate::SetWindowRect(WebWidget* webwidget, | |
737 const gfx::Rect& rect) { | |
738 if (webwidget == shell_->webView()) { | |
739 // ignored | |
740 } else if (webwidget == shell_->popup()) { | |
741 MoveWindow(shell_->popupWnd(), | |
742 rect.x(), rect.y(), rect.width(), rect.height(), FALSE); | |
743 } | |
744 } | |
745 | |
746 void TestWebViewDelegate::GetRootWindowRect(WebWidget* webwidget, | |
747 gfx::Rect* out_rect) { | |
748 if (WebWidgetHost* host = GetHostForWidget(webwidget)) { | |
749 RECT rect; | |
750 HWND root_window = ::GetAncestor(host->window_handle(), GA_ROOT); | |
751 ::GetWindowRect(root_window, &rect); | |
752 *out_rect = gfx::Rect(rect); | |
753 } | |
754 } | |
755 | 615 |
756 void TestWebViewDelegate::DidMove(WebWidget* webwidget, | 616 void TestWebViewDelegate::DidMove(WebWidget* webwidget, |
757 const WebPluginGeometry& move) { | 617 const WebPluginGeometry& move) { |
| 618 #if defined(OS_WIN) |
| 619 // TODO(port): add me once plugins work. |
758 WebPluginDelegateImpl::MoveWindow( | 620 WebPluginDelegateImpl::MoveWindow( |
759 move.window, move.window_rect, move.clip_rect, move.cutout_rects, | 621 move.window, move.window_rect, move.clip_rect, move.cutout_rects, |
760 move.visible); | 622 move.visible); |
761 } | 623 #endif |
762 | |
763 void TestWebViewDelegate::RunModal(WebWidget* webwidget) { | |
764 Show(webwidget, NEW_WINDOW); | |
765 | |
766 WindowList* wl = TestShell::windowList(); | |
767 for (WindowList::const_iterator i = wl->begin(); i != wl->end(); ++i) { | |
768 if (*i != shell_->mainWnd()) | |
769 EnableWindow(*i, FALSE); | |
770 } | |
771 | |
772 shell_->set_is_modal(true); | |
773 MessageLoop::current()->Run(); | |
774 | |
775 for (WindowList::const_iterator i = wl->begin(); i != wl->end(); ++i) | |
776 EnableWindow(*i, TRUE); | |
777 } | 624 } |
778 | 625 |
779 bool TestWebViewDelegate::IsHidden() { | 626 bool TestWebViewDelegate::IsHidden() { |
780 return false; | 627 return false; |
781 } | 628 } |
782 | 629 |
783 void TestWebViewDelegate::RegisterDragDrop() { | 630 void TestWebViewDelegate::RegisterDragDrop() { |
| 631 #if defined(OS_WIN) |
| 632 // TODO(port): add me once drag and drop works. |
784 DCHECK(!drop_delegate_); | 633 DCHECK(!drop_delegate_); |
785 drop_delegate_ = new TestDropDelegate(shell_->webViewWnd(), | 634 drop_delegate_ = new TestDropDelegate(shell_->webViewWnd(), |
786 shell_->webView()); | 635 shell_->webView()); |
| 636 #endif |
787 } | 637 } |
788 | 638 |
789 // Private methods ----------------------------------------------------------- | 639 // Private methods ----------------------------------------------------------- |
790 | 640 |
791 void TestWebViewDelegate::UpdateAddressBar(WebView* webView) { | 641 void TestWebViewDelegate::UpdateAddressBar(WebView* webView) { |
792 WebFrame* mainFrame = webView->GetMainFrame(); | 642 WebFrame* mainFrame = webView->GetMainFrame(); |
793 | 643 |
794 WebDataSource* dataSource = mainFrame->GetDataSource(); | 644 WebDataSource* dataSource = mainFrame->GetDataSource(); |
795 if (!dataSource) | 645 if (!dataSource) |
796 dataSource = mainFrame->GetProvisionalDataSource(); | 646 dataSource = mainFrame->GetProvisionalDataSource(); |
797 if (!dataSource) | 647 if (!dataSource) |
798 return; | 648 return; |
799 | 649 |
800 std::wstring frameURL = | 650 SetAddressBarURL(dataSource->GetRequest().GetMainDocumentURL()); |
801 UTF8ToWide(dataSource->GetRequest().GetMainDocumentURL().spec()); | |
802 SendMessage(shell_->editWnd(), WM_SETTEXT, 0, | |
803 reinterpret_cast<LPARAM>(frameURL.c_str())); | |
804 } | 651 } |
805 | 652 |
806 void TestWebViewDelegate::LocationChangeDone(WebDataSource* data_source) { | 653 void TestWebViewDelegate::LocationChangeDone(WebDataSource* data_source) { |
807 if (data_source->GetWebFrame() == top_loading_frame_) { | 654 if (data_source->GetWebFrame() == top_loading_frame_) { |
808 top_loading_frame_ = NULL; | 655 top_loading_frame_ = NULL; |
809 | 656 |
810 if (!shell_->interactive()) | 657 if (!shell_->interactive()) |
811 shell_->layout_test_controller()->LocationChangeDone(); | 658 shell_->layout_test_controller()->LocationChangeDone(); |
812 } | 659 } |
813 } | 660 } |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
847 | 694 |
848 UpdateURL(frame); | 695 UpdateURL(frame); |
849 } | 696 } |
850 | 697 |
851 void TestWebViewDelegate::UpdateURL(WebFrame* frame) { | 698 void TestWebViewDelegate::UpdateURL(WebFrame* frame) { |
852 WebDataSource* ds = frame->GetDataSource(); | 699 WebDataSource* ds = frame->GetDataSource(); |
853 DCHECK(ds); | 700 DCHECK(ds); |
854 | 701 |
855 const WebRequest& request = ds->GetRequest(); | 702 const WebRequest& request = ds->GetRequest(); |
856 | 703 |
857 // We don't hold a reference to the extra data. The request's reference will | |
858 // be sufficient because we won't modify it during our call. MAY BE NULL. | |
859 TestShellExtraRequestData* extra_data = | |
860 static_cast<TestShellExtraRequestData*>(request.GetExtraData()); | |
861 | |
862 // Type is unused. | 704 // Type is unused. |
863 scoped_ptr<TestNavigationEntry> entry(new TestNavigationEntry); | 705 scoped_ptr<TestNavigationEntry> entry(new TestNavigationEntry); |
864 | 706 |
865 // Bug 654101: the referrer will be empty on https->http transitions. It | 707 // Bug 654101: the referrer will be empty on https->http transitions. It |
866 // would be nice if we could get the real referrer from somewhere. | 708 // would be nice if we could get the real referrer from somewhere. |
867 entry->SetPageID(page_id_); | 709 entry->SetPageID(page_id_); |
868 if (ds->HasUnreachableURL()) { | 710 if (ds->HasUnreachableURL()) { |
869 entry->SetURL(GURL(ds->GetUnreachableURL())); | 711 entry->SetURL(GURL(ds->GetUnreachableURL())); |
870 } else { | 712 } else { |
871 entry->SetURL(GURL(request.GetURL())); | 713 entry->SetURL(GURL(request.GetURL())); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
909 else | 751 else |
910 return L"main frame"; | 752 return L"main frame"; |
911 } else { | 753 } else { |
912 if (name.length()) | 754 if (name.length()) |
913 return L"frame \"" + name + L"\""; | 755 return L"frame \"" + name + L"\""; |
914 else | 756 else |
915 return L"frame (anonymous)"; | 757 return L"frame (anonymous)"; |
916 } | 758 } |
917 } | 759 } |
918 | 760 |
OLD | NEW |