| 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
|
|
|