| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/site_per_process_browsertest.h" | 5 #include "content/browser/site_per_process_browsertest.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 7983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7994 // it's become pending deletion. | 7994 // it's become pending deletion. |
| 7995 child_rfh->OnDispatchLoad(); | 7995 child_rfh->OnDispatchLoad(); |
| 7996 | 7996 |
| 7997 // In the bug, OnDispatchLoad killed the b.com renderer. Ensure that this is | 7997 // In the bug, OnDispatchLoad killed the b.com renderer. Ensure that this is |
| 7998 // not the case. Note that the process kill doesn't happen immediately, so | 7998 // not the case. Note that the process kill doesn't happen immediately, so |
| 7999 // IsRenderFrameLive() can't be checked here (yet). Instead, check that | 7999 // IsRenderFrameLive() can't be checked here (yet). Instead, check that |
| 8000 // JavaScript can still execute in b.com using the popup. | 8000 // JavaScript can still execute in b.com using the popup. |
| 8001 EXPECT_TRUE(ExecuteScript(popup_shell->web_contents(), "true")); | 8001 EXPECT_TRUE(ExecuteScript(popup_shell->web_contents(), "true")); |
| 8002 } | 8002 } |
| 8003 | 8003 |
| 8004 #if defined(OS_MACOSX) |
| 8005 class TextInputClientMacHelper { |
| 8006 public: |
| 8007 TextInputClientMacHelper() {} |
| 8008 ~TextInputClientMacHelper() {} |
| 8009 |
| 8010 void WaitForStringFromRange(RenderWidgetHost* rwh, const gfx::Range& range) { |
| 8011 GetStringFromRangeForRenderWidget( |
| 8012 rwh, range, base::Bind(&TextInputClientMacHelper::OnResult, |
| 8013 base::Unretained(this))); |
| 8014 loop_runner_ = new MessageLoopRunner(); |
| 8015 loop_runner_->Run(); |
| 8016 } |
| 8017 |
| 8018 void WaitForStringAtPoint(RenderWidgetHost* rwh, const gfx::Point& point) { |
| 8019 GetStringAtPointForRenderWidget( |
| 8020 rwh, point, base::Bind(&TextInputClientMacHelper::OnResult, |
| 8021 base::Unretained(this))); |
| 8022 loop_runner_ = new MessageLoopRunner(); |
| 8023 loop_runner_->Run(); |
| 8024 } |
| 8025 const std::string& word() const { return word_; } |
| 8026 const gfx::Point& point() const { return point_; } |
| 8027 |
| 8028 private: |
| 8029 void OnResult(const std::string& string, const gfx::Point& point) { |
| 8030 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
| 8031 BrowserThread::PostTask( |
| 8032 BrowserThread::UI, FROM_HERE, |
| 8033 base::Bind(&TextInputClientMacHelper::OnResult, |
| 8034 base::Unretained(this), string, point)); |
| 8035 return; |
| 8036 } |
| 8037 word_ = string; |
| 8038 point_ = point; |
| 8039 |
| 8040 if (loop_runner_ && loop_runner_->loop_running()) |
| 8041 loop_runner_->Quit(); |
| 8042 } |
| 8043 |
| 8044 std::string word_; |
| 8045 gfx::Point point_; |
| 8046 scoped_refptr<MessageLoopRunner> loop_runner_; |
| 8047 |
| 8048 DISALLOW_COPY_AND_ASSIGN(TextInputClientMacHelper); |
| 8049 }; |
| 8050 |
| 8051 // Tests related to TextInputClientMac. |
| 8052 class SitePerProcessTextInputClientMacTest : public SitePerProcessBrowserTest { |
| 8053 }; |
| 8054 |
| 8055 // This test will load a text only page inside a child frame and then queries |
| 8056 // the string range which includes the first word. Then it uses the returned |
| 8057 // point to query the text again and verifies that correct result is returned. |
| 8058 // Finally, the returned words are compared against the first word in the html |
| 8059 // file which is "This". |
| 8060 IN_PROC_BROWSER_TEST_F(SitePerProcessTextInputClientMacTest, |
| 8061 GetStringFromRangeAndPointChildFrame) { |
| 8062 GURL main_url(embedded_test_server()->GetURL( |
| 8063 "a.com", "/cross_site_iframe_factory.html?a(b)")); |
| 8064 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 8065 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 8066 FrameTreeNode* child = root->child_at(0); |
| 8067 NavigateFrameToURL(child, |
| 8068 embedded_test_server()->GetURL("b.com", "/title1.html")); |
| 8069 |
| 8070 RenderWidgetHost* child_widget_host = |
| 8071 child->current_frame_host()->GetRenderWidgetHost(); |
| 8072 TextInputClientMacHelper helper; |
| 8073 |
| 8074 // Get string from range. |
| 8075 helper.WaitForStringFromRange(child_widget_host, gfx::Range(0, 4)); |
| 8076 gfx::Point point = helper.point(); |
| 8077 std::string word = helper.word(); |
| 8078 |
| 8079 // Now get it at a given point. |
| 8080 point.SetPoint(point.x(), |
| 8081 child_widget_host->GetView()->GetViewBounds().size().height() - |
| 8082 point.y()); |
| 8083 helper.WaitForStringAtPoint(child_widget_host, point); |
| 8084 EXPECT_EQ(word, helper.word()); |
| 8085 EXPECT_EQ("This", word); |
| 8086 } |
| 8087 |
| 8088 // This test will load a text only page and then queries the string range which |
| 8089 // includes the first word. Then it uses the returned point to query the text |
| 8090 // again and verifies that correct result is returned. Finally, the returned |
| 8091 // words are compared against the first word in the html file which is "This". |
| 8092 IN_PROC_BROWSER_TEST_F(SitePerProcessTextInputClientMacTest, |
| 8093 GetStringFromRangeAndPointMainFrame) { |
| 8094 GURL main_url(embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 8095 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 8096 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 8097 RenderWidgetHost* widget_host = |
| 8098 root->current_frame_host()->GetRenderWidgetHost(); |
| 8099 TextInputClientMacHelper helper; |
| 8100 |
| 8101 // Get string from range. |
| 8102 helper.WaitForStringFromRange(widget_host, gfx::Range(0, 4)); |
| 8103 gfx::Point point = helper.point(); |
| 8104 std::string word = helper.word(); |
| 8105 |
| 8106 // Now get it at a given point. |
| 8107 point.SetPoint( |
| 8108 point.x(), |
| 8109 widget_host->GetView()->GetViewBounds().size().height() - point.y()); |
| 8110 helper.WaitForStringAtPoint(widget_host, point); |
| 8111 EXPECT_EQ(word, helper.word()); |
| 8112 EXPECT_EQ("This", word); |
| 8113 } |
| 8114 |
| 8115 #endif // defined(OS_MACOSX) |
| 8116 |
| 8004 } // namespace content | 8117 } // namespace content |
| OLD | NEW |