blob: f82a238ee0b719d2ddf77adc3d67d5439d445dac [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/views/controls/webview/webview.h"
#include "base/command_line.h"
#include "base/memory/scoped_ptr.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/test_browser_context.h"
#include "content/public/test/test_browser_thread.h"
#include "ui/base/ime/text_input_focus_manager.h"
#include "ui/base/ui_base_switches.h"
#include "ui/gl/gl_surface.h"
#include "ui/views/test/webview_test_helper.h"
#include "ui/views/test/widget_test.h"
namespace {
class WebViewInteractiveUiTest : public views::test::WidgetTest {
public:
WebViewInteractiveUiTest()
: ui_thread_(content::BrowserThread::UI, base::MessageLoop::current()) {}
void SetUp() override {
gfx::GLSurface::InitializeOneOffForTests();
WidgetTest::SetUp();
}
protected:
content::BrowserContext* browser_context() { return &browser_context_; }
private:
content::TestBrowserContext browser_context_;
views::WebViewTestHelper webview_test_helper_;
content::TestBrowserThread ui_thread_;
DISALLOW_COPY_AND_ASSIGN(WebViewInteractiveUiTest);
};
TEST_F(WebViewInteractiveUiTest, TextInputClientIsUpToDate) {
// WebViewInteractiveUiTest.TextInputClientIsUpToDate needs
// kEnableTextInputFocusManager flag to be enabled.
base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
cmd_line->AppendSwitch(switches::kEnableTextInputFocusManager);
// Create a top level widget and a webview as its content.
views::Widget* widget = CreateTopLevelFramelessPlatformWidget();
views::WebView* webview = new views::WebView(browser_context());
widget->SetContentsView(webview);
widget->Show();
webview->RequestFocus();
ui::TextInputFocusManager* text_input_focus_manager =
ui::TextInputFocusManager::GetInstance();
const ui::TextInputClient* null_text_input_client = NULL;
EXPECT_EQ(null_text_input_client, webview->GetTextInputClient());
EXPECT_EQ(text_input_focus_manager->GetFocusedTextInputClient(),
webview->GetTextInputClient());
// Case 1: Creates a new WebContents.
webview->GetWebContents();
webview->RequestFocus();
ui::TextInputClient* client1 = webview->GetTextInputClient();
EXPECT_NE(null_text_input_client, client1);
EXPECT_EQ(text_input_focus_manager->GetFocusedTextInputClient(), client1);
// Case 2: Replaces a WebContents by SetWebContents().
content::WebContents::CreateParams params(browser_context());
scoped_ptr<content::WebContents> web_contents(
content::WebContents::Create(params));
webview->SetWebContents(web_contents.get());
ui::TextInputClient* client2 = webview->GetTextInputClient();
EXPECT_NE(null_text_input_client, client2);
EXPECT_EQ(text_input_focus_manager->GetFocusedTextInputClient(), client2);
EXPECT_NE(client1, client2);
widget->Close();
RunPendingMessages();
}
} // namespace