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

Unified Diff: chrome/test/render_view_test.cc

Issue 7537033: Move more files from chrome/test to chrome/test/base, part #5 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 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
« no previous file with comments | « chrome/test/render_view_test.h ('k') | chrome/test/startup/startup_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/render_view_test.cc
===================================================================
--- chrome/test/render_view_test.cc (revision 94974)
+++ chrome/test/render_view_test.cc (working copy)
@@ -1,321 +0,0 @@
-// Copyright (c) 2011 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 "chrome/test/render_view_test.h"
-
-#include "chrome/browser/extensions/extension_function_dispatcher.h"
-#include "chrome/common/extensions/extension.h"
-#include "chrome/common/print_messages.h"
-#include "chrome/common/render_messages.h"
-#include "chrome/renderer/autofill/password_autofill_manager.h"
-#include "chrome/renderer/extensions/event_bindings.h"
-#include "chrome/renderer/extensions/extension_dispatcher.h"
-#include "chrome/renderer/extensions/extension_process_bindings.h"
-#include "chrome/renderer/extensions/js_only_v8_extensions.h"
-#include "chrome/renderer/extensions/renderer_extension_bindings.h"
-#include "chrome/renderer/mock_render_process.h"
-#include "content/common/dom_storage_common.h"
-#include "content/common/native_web_keyboard_event.h"
-#include "content/common/renderer_preferences.h"
-#include "content/common/view_messages.h"
-#include "content/renderer/renderer_main_platform_delegate.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebScriptController.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebScriptSource.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
-#include "webkit/glue/webkit_glue.h"
-
-#if defined(OS_LINUX)
-#include "ui/base/gtk/event_synthesis_gtk.h"
-#endif
-
-using WebKit::WebFrame;
-using WebKit::WebInputEvent;
-using WebKit::WebMouseEvent;
-using WebKit::WebScriptController;
-using WebKit::WebScriptSource;
-using WebKit::WebString;
-using WebKit::WebURLRequest;
-using autofill::AutofillAgent;
-using autofill::PasswordAutofillManager;
-
-namespace {
-const int32 kRouteId = 5;
-const int32 kOpenerId = 7;
-} // namespace
-
-RenderViewTest::RenderViewTest() : extension_dispatcher_(NULL) {
-}
-
-RenderViewTest::~RenderViewTest() {
-}
-
-void RenderViewTest::ProcessPendingMessages() {
- msg_loop_.PostTask(FROM_HERE, new MessageLoop::QuitTask());
- msg_loop_.Run();
-}
-
-WebFrame* RenderViewTest::GetMainFrame() {
- return view_->webview()->mainFrame();
-}
-
-void RenderViewTest::ExecuteJavaScript(const char* js) {
- GetMainFrame()->executeScript(WebScriptSource(WebString::fromUTF8(js)));
-}
-
-bool RenderViewTest::ExecuteJavaScriptAndReturnIntValue(
- const string16& script,
- int* int_result) {
- v8::Handle<v8::Value> result =
- GetMainFrame()->executeScriptAndReturnValue(WebScriptSource(script));
- if (result.IsEmpty() || !result->IsInt32())
- return false;
-
- if (int_result)
- *int_result = result->Int32Value();
-
- return true;
-}
-
-void RenderViewTest::LoadHTML(const char* html) {
- std::string url_str = "data:text/html;charset=utf-8,";
- url_str.append(html);
- GURL url(url_str);
-
- GetMainFrame()->loadRequest(WebURLRequest(url));
-
- // The load actually happens asynchronously, so we pump messages to process
- // the pending continuation.
- ProcessPendingMessages();
-}
-
-void RenderViewTest::SetUp() {
- content::GetContentClient()->set_renderer(&chrome_content_renderer_client_);
- extension_dispatcher_ = new ExtensionDispatcher();
- chrome_content_renderer_client_.SetExtensionDispatcher(extension_dispatcher_);
- sandbox_init_wrapper_.reset(new SandboxInitWrapper());
- command_line_.reset(new CommandLine(CommandLine::NO_PROGRAM));
- params_.reset(new MainFunctionParams(*command_line_, *sandbox_init_wrapper_,
- NULL));
- platform_.reset(new RendererMainPlatformDelegate(*params_));
- platform_->PlatformInitialize();
-
- // Setting flags and really doing anything with WebKit is fairly fragile and
- // hacky, but this is the world we live in...
- webkit_glue::SetJavaScriptFlags(" --expose-gc");
- WebKit::initialize(&webkitclient_);
- WebScriptController::registerExtension(JsonSchemaJsV8Extension::Get());
- WebScriptController::registerExtension(EventBindings::Get(
- extension_dispatcher_));
- WebScriptController::registerExtension(ExtensionApiTestV8Extension::Get());
- WebScriptController::registerExtension(ExtensionProcessBindings::Get(
- extension_dispatcher_));
- WebScriptController::registerExtension(RendererExtensionBindings::Get(
- extension_dispatcher_));
- EventBindings::SetRenderThread(&render_thread_);
-
- mock_process_.reset(new MockRenderProcess);
-
- render_thread_.set_routing_id(kRouteId);
-
- // This needs to pass the mock render thread to the view.
- view_ = RenderView::Create(&render_thread_,
- 0,
- kOpenerId,
- RendererPreferences(),
- WebPreferences(),
- new SharedRenderViewCounter(0),
- kRouteId,
- kInvalidSessionStorageNamespaceId,
- string16());
-
- // Attach a pseudo keyboard device to this object.
- mock_keyboard_.reset(new MockKeyboard());
-
- // RenderView doesn't expose it's PasswordAutofillManager or
- // AutofillAgent objects, because it has no need to store them directly
- // (they're stored as RenderViewObserver*). So just create another set.
- password_autofill_ = new PasswordAutofillManager(view_);
- autofill_agent_ = new AutofillAgent(view_, password_autofill_);
-}
-
-void RenderViewTest::TearDown() {
- // Try very hard to collect garbage before shutting down.
- GetMainFrame()->collectGarbage();
- GetMainFrame()->collectGarbage();
-
- render_thread_.SendCloseMessage();
-
- // Run the loop so the release task from the renderwidget executes.
- ProcessPendingMessages();
-
- EventBindings::SetRenderThread(NULL);
-
- view_ = NULL;
-
- mock_process_.reset();
-
- // After resetting the view_ and mock_process_ we may get some new tasks
- // which need to be processed before shutting down WebKit
- // (http://crbug.com/21508).
- msg_loop_.RunAllPending();
-
- WebKit::shutdown();
-
- mock_keyboard_.reset();
-
- platform_->PlatformUninitialize();
- platform_.reset();
- params_.reset();
- command_line_.reset();
- sandbox_init_wrapper_.reset();
-
- extension_dispatcher_->OnRenderProcessShutdown();
- extension_dispatcher_ = NULL;
-}
-
-int RenderViewTest::SendKeyEvent(MockKeyboard::Layout layout,
- int key_code,
- MockKeyboard::Modifiers modifiers,
- std::wstring* output) {
-#if defined(OS_WIN)
- // Retrieve the Unicode character for the given tuple (keyboard-layout,
- // key-code, and modifiers).
- // Exit when a keyboard-layout driver cannot assign a Unicode character to
- // the tuple to prevent sending an invalid key code to the RenderView object.
- CHECK(mock_keyboard_.get());
- CHECK(output);
- int length = mock_keyboard_->GetCharacters(layout, key_code, modifiers,
- output);
- if (length != 1)
- return -1;
-
- // Create IPC messages from Windows messages and send them to our
- // back-end.
- // A keyboard event of Windows consists of three Windows messages:
- // WM_KEYDOWN, WM_CHAR, and WM_KEYUP.
- // WM_KEYDOWN and WM_KEYUP sends virtual-key codes. On the other hand,
- // WM_CHAR sends a composed Unicode character.
- NativeWebKeyboardEvent keydown_event(NULL, WM_KEYDOWN, key_code, 0);
- SendNativeKeyEvent(keydown_event);
-
- NativeWebKeyboardEvent char_event(NULL, WM_CHAR, (*output)[0], 0);
- SendNativeKeyEvent(char_event);
-
- NativeWebKeyboardEvent keyup_event(NULL, WM_KEYUP, key_code, 0);
- SendNativeKeyEvent(keyup_event);
-
- return length;
-#elif defined(OS_LINUX)
- // We ignore |layout|, which means we are only testing the layout of the
- // current locale. TODO(estade): fix this to respect |layout|.
- std::vector<GdkEvent*> events;
- ui::SynthesizeKeyPressEvents(
- NULL, static_cast<ui::KeyboardCode>(key_code),
- modifiers & (MockKeyboard::LEFT_CONTROL | MockKeyboard::RIGHT_CONTROL),
- modifiers & (MockKeyboard::LEFT_SHIFT | MockKeyboard::RIGHT_SHIFT),
- modifiers & (MockKeyboard::LEFT_ALT | MockKeyboard::RIGHT_ALT),
- &events);
-
- guint32 unicode_key = 0;
- for (size_t i = 0; i < events.size(); ++i) {
- // Only send the up/down events for key press itself (skip the up/down
- // events for the modifier keys).
- if ((i + 1) == (events.size() / 2) || i == (events.size() / 2)) {
- unicode_key = gdk_keyval_to_unicode(events[i]->key.keyval);
- NativeWebKeyboardEvent webkit_event(&events[i]->key);
- SendNativeKeyEvent(webkit_event);
-
- // Need to add a char event after the key down.
- if (webkit_event.type == WebKit::WebInputEvent::RawKeyDown) {
- NativeWebKeyboardEvent char_event = webkit_event;
- char_event.type = WebKit::WebInputEvent::Char;
- char_event.skip_in_browser = true;
- SendNativeKeyEvent(char_event);
- }
- }
- gdk_event_free(events[i]);
- }
-
- *output = std::wstring(1, unicode_key);
- return 1;
-#else
- NOTIMPLEMENTED();
- return L'\0';
-#endif
-}
-
-void RenderViewTest::SendNativeKeyEvent(
- const NativeWebKeyboardEvent& key_event) {
- scoped_ptr<IPC::Message> input_message(new ViewMsg_HandleInputEvent(0));
- input_message->WriteData(reinterpret_cast<const char*>(&key_event),
- sizeof(WebKit::WebKeyboardEvent));
- view_->OnMessageReceived(*input_message);
-}
-
-const char* const kGetCoordinatesScript =
- "(function() {"
- " function GetCoordinates(elem) {"
- " if (!elem)"
- " return [ 0, 0];"
- " var coordinates = [ elem.offsetLeft, elem.offsetTop];"
- " var parent_coordinates = GetCoordinates(elem.offsetParent);"
- " coordinates[0] += parent_coordinates[0];"
- " coordinates[1] += parent_coordinates[1];"
- " return coordinates;"
- " };"
- " var elem = document.getElementById('$1');"
- " if (!elem)"
- " return null;"
- " var bounds = GetCoordinates(elem);"
- " bounds[2] = elem.offsetWidth;"
- " bounds[3] = elem.offsetHeight;"
- " return bounds;"
- "})();";
-gfx::Rect RenderViewTest::GetElementBounds(const std::string& element_id) {
- std::vector<std::string> params;
- params.push_back(element_id);
- std::string script =
- ReplaceStringPlaceholders(kGetCoordinatesScript, params, NULL);
-
- v8::HandleScope handle_scope;
- v8::Handle<v8::Value> value = GetMainFrame()->executeScriptAndReturnValue(
- WebScriptSource(WebString::fromUTF8(script)));
- if (value.IsEmpty() || !value->IsArray())
- return gfx::Rect();
-
- v8::Handle<v8::Array> array = value.As<v8::Array>();
- if (array->Length() != 4)
- return gfx::Rect();
- std::vector<int> coords;
- for (int i = 0; i < 4; ++i) {
- v8::Handle<v8::Number> index = v8::Number::New(i);
- v8::Local<v8::Value> value = array->Get(index);
- if (value.IsEmpty() || !value->IsInt32())
- return gfx::Rect();
- coords.push_back(value->Int32Value());
- }
- return gfx::Rect(coords[0], coords[1], coords[2], coords[3]);
-}
-
-bool RenderViewTest::SimulateElementClick(const std::string& element_id) {
- gfx::Rect bounds = GetElementBounds(element_id);
- if (bounds.IsEmpty())
- return false;
- WebMouseEvent mouse_event;
- mouse_event.type = WebInputEvent::MouseDown;
- mouse_event.button = WebMouseEvent::ButtonLeft;
- mouse_event.x = bounds.CenterPoint().x();
- mouse_event.y = bounds.CenterPoint().y();
- mouse_event.clickCount = 1;
- ViewMsg_HandleInputEvent input_event(0);
- scoped_ptr<IPC::Message> input_message(new ViewMsg_HandleInputEvent(0));
- input_message->WriteData(reinterpret_cast<const char*>(&mouse_event),
- sizeof(WebMouseEvent));
- view_->OnMessageReceived(*input_message);
- return true;
-}
« no previous file with comments | « chrome/test/render_view_test.h ('k') | chrome/test/startup/startup_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698