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

Unified Diff: chrome/browser/apps/guest_view/web_view_browsertest.cc

Issue 2136193002: Fix crash on clicking on <select> tag (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add browser test Created 4 years, 5 months 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/apps/guest_view/web_view_browsertest.cc
diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc
index a414b173709fe761877f3ab2d079c46e5197d056..cb39291b9871f8320d8d0360ae51ce06c861b159 100644
--- a/chrome/browser/apps/guest_view/web_view_browsertest.cc
+++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc
@@ -87,6 +87,12 @@
#include "ui/views/view.h"
#include "ui/views/widget/widget.h"
+#if defined (USE_AURA)
+#include "content/common/view_messages.h"
+#include "content/public/browser/browser_message_filter.h"
+#include "ipc/ipc_message_macros.h"
+#endif
+
#if defined(ENABLE_PLUGINS)
#include "content/public/browser/plugin_service.h"
#include "content/public/common/webplugininfo.h"
@@ -246,6 +252,51 @@ views::View* FindWebView(views::View* view) {
}
return nullptr;
}
+
+// Waits for widget shown/closed.
+class WidgetUpdatedWaiter : public content::BrowserMessageFilter {
+ public:
+ explicit WidgetUpdatedWaiter(content::WebContents* web_contents)
+ : content::BrowserMessageFilter(ViewMsgStart) {
+ web_contents->GetRenderProcessHost()->AddFilter(this);
+ }
+
+ bool OnMessageReceived(const IPC::Message& message) override {
+ IPC_BEGIN_MESSAGE_MAP(WidgetUpdatedWaiter, message)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_ShowWidget, OnShowWidget)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_Close, OnCloseWidget)
+ IPC_END_MESSAGE_MAP()
+ return false;
+ }
+
+ void Wait() {
+ message_loop_runner_ = new content::MessageLoopRunner;
+ message_loop_runner_->Run();
+ base::RunLoop().RunUntilIdle();
+ }
+
+ private:
+ ~WidgetUpdatedWaiter() override {}
+
+ void OnShowWidget(int route_id, const gfx::Rect& initial_rect) {
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI, FROM_HERE,
+ base::Bind(&WidgetUpdatedWaiter::OnWidgetUpdatedOnUI, this));
+ }
+ void OnCloseWidget() {
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI, FROM_HERE,
+ base::Bind(&WidgetUpdatedWaiter::OnWidgetUpdatedOnUI, this));
+ }
+
+ void OnWidgetUpdatedOnUI() {
+ message_loop_runner_->Quit();
+ }
+
+ scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
+
+ DISALLOW_COPY_AND_ASSIGN(WidgetUpdatedWaiter);
+};
#endif
} // namespace
@@ -1127,6 +1178,37 @@ IN_PROC_BROWSER_TEST_P(WebViewTest, Shim_TestWebRequestAPIErrorOccurred) {
TestHelper("testWebRequestAPIErrorOccurred", "web_view/shim", NO_TEST_SERVER);
}
+#if defined(USE_AURA)
+// Test validates that select tag can be shown and hidden in webview safely
+// using quick touch.
+IN_PROC_BROWSER_TEST_P(WebViewTest, SelectShowHide) {
+ LoadAppWithGuest("web_view/select");
+
+ content::WebContents* embedder_contents = GetFirstAppWindowWebContents();
+ ASSERT_TRUE(embedder_contents);
+
+ std::vector<content::WebContents*> guest_contents_list;
+ GetGuestViewManager()->GetGuestWebContentsList(&guest_contents_list);
+ ASSERT_EQ(1u, guest_contents_list.size());
+ content::WebContents* guest_contents = guest_contents_list[0];
+
+ const gfx::Rect embedder_rect = embedder_contents->GetContainerBounds();
+ const gfx::Rect guest_rect = guest_contents->GetContainerBounds();
+ const gfx::Point click_point(guest_rect.x() - embedder_rect.x() + 10,
+ guest_rect.y() - embedder_rect.y() + 10);
+
+ scoped_refptr<WidgetUpdatedWaiter> widget_updated_waiter =
+ new WidgetUpdatedWaiter(guest_contents);
+
+ for (int i = 0; i < 10; ++i) {
+ // Important, pass mouse click to embedder in order to transfer focus.
+ content::SimulateMouseClickAt(
+ embedder_contents, 0, blink::WebMouseEvent::ButtonLeft, click_point);
+ widget_updated_waiter->Wait();
+ }
+}
+#endif
+
// http://crbug.com/315920
#if defined(GOOGLE_CHROME_BUILD) && (defined(OS_WIN) || defined(OS_LINUX))
#define MAYBE_Shim_TestChromeExtensionURL DISABLED_Shim_TestChromeExtensionURL

Powered by Google App Engine
This is Rietveld 408576698