Index: webkit/tools/test_shell/gtk/test_shell.cc |
diff --git a/webkit/tools/test_shell/gtk/test_shell.cc b/webkit/tools/test_shell/gtk/test_shell.cc |
index 97dc66cc0fb8911755c25214305ced50ac2a500a..c048f045aff4504f5092a1e380d4d845ef73734e 100644 |
--- a/webkit/tools/test_shell/gtk/test_shell.cc |
+++ b/webkit/tools/test_shell/gtk/test_shell.cc |
@@ -10,26 +10,34 @@ |
#include "base/path_service.h" |
#include "base/string_util.h" |
#include "net/base/mime_util.h" |
+#include "webkit/glue/webframe.h" |
#include "webkit/glue/webpreferences.h" |
+#include "webkit/glue/webview.h" |
#include "webkit/glue/plugins/plugin_list.h" |
#include "webkit/glue/resource_loader_bridge.h" |
#include "webkit/tools/test_shell/test_navigation_controller.h" |
+#include "webkit/tools/test_shell/test_webview_delegate.h" |
WebPreferences* TestShell::web_prefs_ = NULL; |
WindowList* TestShell::window_list_; |
-TestShell::TestShell() { |
+TestShell::TestShell() |
+ : delegate_(new TestWebViewDelegate(this)) { |
+ layout_test_controller_.reset(new LayoutTestController(this)); |
+ navigation_controller_.reset(new TestNavigationController(this)); |
} |
TestShell::~TestShell() { |
} |
+bool TestShell::interactive_ = false; |
+ |
// static |
void TestShell::InitializeTestShell(bool interactive) { |
window_list_ = new WindowList; |
- |
web_prefs_ = new WebPreferences; |
+ interactive_ = interactive; |
} |
// static |
@@ -78,21 +86,116 @@ bool TestShell::Initialize(const std::wstring& startingURL) { |
gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); |
m_webViewHost.reset(WebViewHost::Create(vbox, NULL, *TestShell::web_prefs_)); |
+ if (!startingURL.empty()) |
+ LoadURL(startingURL.c_str()); |
+ |
gtk_container_add(GTK_CONTAINER(m_mainWnd), vbox); |
gtk_widget_show_all(m_mainWnd); |
return true; |
} |
+void TestShell::TestFinished() { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+void TestShell::Show(WebView* webview, WindowOpenDisposition disposition) { |
+ delegate_->Show(webview, disposition); |
+} |
+ |
+void TestShell::SetFocus(WebWidgetHost* host, bool enable) { |
+ // TODO(agl): port the body of this function |
+ NOTIMPLEMENTED(); |
+} |
+ |
void TestShell::BindJSObjectsToWindow(WebFrame* frame) { |
NOTIMPLEMENTED(); |
} |
-bool TestShell::Navigate(const TestNavigationEntry& entry, bool reload) { |
+void TestShell::DestroyWindow(gfx::WindowHandle windowHandle) { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+WebView* TestShell::CreateWebView(WebView* webview) { |
+ NOTIMPLEMENTED(); |
+ return NULL; |
+} |
+ |
+WebWidget* TestShell::CreatePopupWidget(WebView* webview) { |
NOTIMPLEMENTED(); |
+ return NULL; |
+} |
+ |
+void TestShell::LoadURL(const wchar_t* url) |
+{ |
+ LoadURLForFrame(url, NULL); |
+} |
+ |
+void TestShell::LoadURLForFrame(const wchar_t* url, |
+ const wchar_t* frame_name) { |
+ if (!url) |
+ return; |
+ |
+ std::wstring frame_string; |
+ if (frame_name) |
+ frame_string = frame_name; |
+ |
+ navigation_controller_->LoadEntry(new TestNavigationEntry( |
+ -1, GURL(WideToUTF8(url)), std::wstring(), frame_string)); |
+} |
+ |
+bool TestShell::Navigate(const TestNavigationEntry& entry, bool reload) { |
+ WebRequestCachePolicy cache_policy; |
+ if (reload) { |
+ cache_policy = WebRequestReloadIgnoringCacheData; |
+ } else if (entry.GetPageID() != -1) { |
+ cache_policy = WebRequestReturnCacheDataElseLoad; |
+ } else { |
+ cache_policy = WebRequestUseProtocolCachePolicy; |
+ } |
+ |
+ scoped_ptr<WebRequest> request(WebRequest::Create(entry.GetURL())); |
+ request->SetCachePolicy(cache_policy); |
+ // If we are reloading, then WebKit will use the state of the current page. |
+ // Otherwise, we give it the state to navigate to. |
+ if (!reload) |
+ request->SetHistoryState(entry.GetContentState()); |
+ |
+ request->SetExtraData( |
+ new TestShellExtraRequestData(entry.GetPageID())); |
+ |
+ // Get the right target frame for the entry. |
+ WebFrame* frame = webView()->GetMainFrame(); |
+ if (!entry.GetTargetFrame().empty()) |
+ frame = webView()->GetFrameWithName(entry.GetTargetFrame()); |
+ // TODO(mpcomplete): should we clear the target frame, or should |
+ // back/forward navigations maintain the target frame? |
+ |
+ frame->LoadRequest(request.get()); |
+ // Restore focus to the main frame prior to loading new request. |
+ // This makes sure that we don't have a focused iframe. Otherwise, that |
+ // iframe would keep focus when the SetFocus called immediately after |
+ // LoadRequest, thus making some tests fail (see http://b/issue?id=845337 |
+ // for more details). |
+ webView()->SetFocusedFrame(frame); |
+ SetFocus(webViewHost(), true); |
+ |
return true; |
} |
+void TestShell::GoBackOrForward(int offset) { |
+ navigation_controller_->GoToOffset(offset); |
+} |
+ |
+void TestShell::Reload() { |
+ navigation_controller_->Reload(); |
+} |
+ |
+std::string TestShell::RewriteLocalUrl(const std::string& url) { |
+ NOTIMPLEMENTED(); |
+ return ""; |
+} |
+ |
//----------------------------------------------------------------------------- |
namespace webkit_glue { |