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
3// found in the LICENSE file.
4
5#include "chrome/test/base/chrome_render_view_test.h"
6
7#include "base/debug/leak_annotations.h"
8#include "chrome/browser/chrome_content_browser_client.h"
9#include "chrome/common/chrome_content_client.h"
10#include "chrome/common/render_messages.h"
11#include "chrome/renderer/chrome_content_renderer_client.h"
12#include "chrome/renderer/spellchecker/spellcheck.h"
13#include "chrome/test/base/chrome_unit_test_suite.h"
14#include "components/autofill/content/renderer/autofill_agent.h"
15#include "components/autofill/content/renderer/password_autofill_agent.h"
16#include "components/autofill/content/renderer/test_password_autofill_agent.h"
17#include "components/autofill/content/renderer/test_password_generation_agent.h"
18#include "content/public/browser/native_web_keyboard_event.h"
19#include "content/public/common/renderer_preferences.h"
20#include "content/public/renderer/render_view.h"
21#include "third_party/WebKit/public/platform/WebURLRequest.h"
22#include "third_party/WebKit/public/web/WebFrame.h"
23#include "third_party/WebKit/public/web/WebInputEvent.h"
24#include "third_party/WebKit/public/web/WebKit.h"
25#include "third_party/WebKit/public/web/WebScriptController.h"
26#include "third_party/WebKit/public/web/WebScriptSource.h"
27#include "third_party/WebKit/public/web/WebView.h"
28
29#if defined(ENABLE_EXTENSIONS)
30#include "chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.h"
31#include "extensions/browser/extension_function_dispatcher.h"
32#include "extensions/common/extension.h"
33#include "extensions/renderer/dispatcher.h"
34#include "extensions/renderer/event_bindings.h"
35#endif
36
37using autofill::AutofillAgent;
38using autofill::PasswordAutofillAgent;
39using autofill::PasswordGenerationAgent;
40using blink::WebFrame;
41using blink::WebInputEvent;
42using blink::WebMouseEvent;
43using blink::WebScriptController;
44using blink::WebScriptSource;
45using blink::WebString;
46using blink::WebURLRequest;
47
48ChromeRenderViewTest::ChromeRenderViewTest()
49    : password_autofill_agent_(NULL),
50      password_generation_(NULL),
51      autofill_agent_(NULL),
52      chrome_render_thread_(NULL) {
53}
54
55ChromeRenderViewTest::~ChromeRenderViewTest() {
56}
57
58void ChromeRenderViewTest::SetUp() {
59  ChromeUnitTestSuite::InitializeProviders();
60  ChromeUnitTestSuite::InitializeResourceBundle();
61
62  chrome_render_thread_ = new ChromeMockRenderThread();
63  render_thread_.reset(chrome_render_thread_);
64
65  content::RenderViewTest::SetUp();
66
67  // RenderView doesn't expose its Agent objects, because it has no need to
68  // store them directly (they're stored as RenderViewObserver*).  So just
69  // create another set.
70  password_autofill_agent_ = new autofill::TestPasswordAutofillAgent(view_);
71  password_generation_ = new autofill::TestPasswordGenerationAgent(view_);
72  autofill_agent_ =
73      new AutofillAgent(view_, password_autofill_agent_, password_generation_);
74}
75
76void ChromeRenderViewTest::TearDown() {
77#if defined(ENABLE_EXTENSIONS)
78  ChromeContentRendererClient* client =
79      static_cast<ChromeContentRendererClient*>(content_renderer_client_.get());
80  client->GetExtensionDispatcherForTest()->OnRenderProcessShutdown();
81#endif
82
83#if defined(LEAK_SANITIZER)
84  // Do this before shutting down V8 in RenderViewTest::TearDown().
85  // http://crbug.com/328552
86  __lsan_do_leak_check();
87#endif
88  content::RenderViewTest::TearDown();
89}
90
91content::ContentClient* ChromeRenderViewTest::CreateContentClient() {
92  return new ChromeContentClient();
93}
94
95content::ContentBrowserClient*
96    ChromeRenderViewTest::CreateContentBrowserClient() {
97  return new chrome::ChromeContentBrowserClient();
98}
99
100content::ContentRendererClient*
101    ChromeRenderViewTest::CreateContentRendererClient() {
102  ChromeContentRendererClient* client = new ChromeContentRendererClient();
103#if defined(ENABLE_EXTENSIONS)
104  extension_dispatcher_delegate_.reset(
105      new ChromeExtensionsDispatcherDelegate());
106  client->SetExtensionDispatcherForTest(
107      new extensions::Dispatcher(extension_dispatcher_delegate_.get()));
108#endif
109#if defined(ENABLE_SPELLCHECK)
110  client->SetSpellcheck(new SpellCheck());
111#endif
112  return client;
113}
114