summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-22 22:27:45 +0000
committerjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-22 22:27:45 +0000
commit37d9dccef3f855d2bbe843a5d519c11ed33c41d5 (patch)
tree5562604adc21f9fb1b3d144ed697828ca8385af6
parent4b44ed4d2d231ca462794dbf07886a02943d6463 (diff)
downloadchromium_src-37d9dccef3f855d2bbe843a5d519c11ed33c41d5.zip
chromium_src-37d9dccef3f855d2bbe843a5d519c11ed33c41d5.tar.gz
chromium_src-37d9dccef3f855d2bbe843a5d519c11ed33c41d5.tar.bz2
[content shell] always focus the frame that was navigated
Otherwise, when the focused frame is destroyed, we end up with no frame focused at all. This approach is a bit crude (doesn't do anything if the page itself initiated the navigation, changes the focus also if we're staying on the page), but it's good enough for layout tests BUG=111316 R=marja@chromium.org TEST=e.g. running fast/inline/25277-2.html after fast/frames/frame-dead-region.html doesn't fail Review URL: https://codereview.chromium.org/12893008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@189927 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/shell/webkit_test_runner.cc20
-rw-r--r--content/shell/webkit_test_runner.h7
2 files changed, 26 insertions, 1 deletions
diff --git a/content/shell/webkit_test_runner.cc b/content/shell/webkit_test_runner.cc
index 1b053f0..c7db9c1 100644
--- a/content/shell/webkit_test_runner.cc
+++ b/content/shell/webkit_test_runner.cc
@@ -166,7 +166,8 @@ WebKitTestRunner::WebKitTestRunner(RenderView* render_view)
RenderViewObserverTracker<WebKitTestRunner>(render_view),
proxy_(NULL),
focused_view_(NULL),
- is_main_window_(false) {
+ is_main_window_(false),
+ focus_on_next_commit_(false) {
}
WebKitTestRunner::~WebKitTestRunner() {
@@ -508,6 +509,23 @@ bool WebKitTestRunner::OnMessageReceived(const IPC::Message& message) {
return handled;
}
+void WebKitTestRunner::Navigate(const GURL& url) {
+ focus_on_next_commit_ = true;
+}
+
+void WebKitTestRunner::DidCommitProvisionalLoad(WebFrame* frame,
+ bool is_new_navigation) {
+ if (!focus_on_next_commit_)
+ return;
+ focus_on_next_commit_ = false;
+ render_view()->GetWebView()->setFocusedFrame(frame);
+}
+
+void WebKitTestRunner::DidFailProvisionalLoad(WebFrame* frame,
+ const WebURLError& error) {
+ focus_on_next_commit_ = false;
+}
+
// Public methods - -----------------------------------------------------------
void WebKitTestRunner::Reset() {
diff --git a/content/shell/webkit_test_runner.h b/content/shell/webkit_test_runner.h
index 060fe36..039cc9c 100644
--- a/content/shell/webkit_test_runner.h
+++ b/content/shell/webkit_test_runner.h
@@ -39,6 +39,11 @@ class WebKitTestRunner : public RenderViewObserver,
// RenderViewObserver implementation.
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void DidClearWindowObject(WebKit::WebFrame* frame) OVERRIDE;
+ virtual void Navigate(const GURL& url) OVERRIDE;
+ virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame,
+ bool is_new_navigation) OVERRIDE;
+ virtual void DidFailProvisionalLoad(
+ WebKit::WebFrame* frame, const WebKit::WebURLError& error) OVERRIDE;
// WebTestDelegate implementation.
virtual void clearEditCommand();
@@ -122,6 +127,8 @@ class WebKitTestRunner : public RenderViewObserver,
bool is_main_window_;
+ bool focus_on_next_commit_;
+
DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner);
};