15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/chrome_render_view_test.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/debug/leak_annotations.h"
823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/chrome_content_browser_client.h"
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/common/chrome_content_client.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/render_messages.h"
1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/renderer/chrome_content_renderer_client.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/renderer/spellchecker/spellcheck.h"
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/test/base/chrome_unit_test_suite.h"
143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "components/autofill/content/renderer/autofill_agent.h"
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/renderer/password_autofill_agent.h"
163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "components/autofill/content/renderer/test_password_autofill_agent.h"
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/autofill/content/renderer/test_password_generation_agent.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/native_web_keyboard_event.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/renderer_preferences.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view.h"
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLRequest.h"
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFrame.h"
237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h"
247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebKit.h"
257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebScriptController.h"
267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebScriptSource.h"
277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebView.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_EXTENSIONS)
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.h"
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/extension_function_dispatcher.h"
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/extension.h"
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/renderer/dispatcher.h"
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/renderer/event_bindings.h"
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing autofill::AutofillAgent;
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing autofill::PasswordAutofillAgent;
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing autofill::PasswordGenerationAgent;
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFrame;
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebInputEvent;
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMouseEvent;
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebScriptController;
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebScriptSource;
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebString;
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebURLRequest;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuChromeRenderViewTest::ChromeRenderViewTest()
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : password_autofill_agent_(NULL),
505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      password_generation_(NULL),
515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      autofill_agent_(NULL),
525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      chrome_render_thread_(NULL) {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeRenderViewTest::~ChromeRenderViewTest() {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeRenderViewTest::SetUp() {
5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  ChromeUnitTestSuite::InitializeProviders();
6023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  ChromeUnitTestSuite::InitializeResourceBundle();
6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  chrome_render_thread_ = new ChromeMockRenderThread();
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  render_thread_.reset(chrome_render_thread_);
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RenderViewTest::SetUp();
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // RenderView doesn't expose its Agent objects, because it has no need to
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // store them directly (they're stored as RenderViewObserver*).  So just
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // create another set.
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  password_autofill_agent_ = new autofill::TestPasswordAutofillAgent(view_);
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  password_generation_ = new autofill::TestPasswordGenerationAgent(view_);
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  autofill_agent_ =
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      new AutofillAgent(view_, password_autofill_agent_, password_generation_);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeRenderViewTest::TearDown() {
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_EXTENSIONS)
785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  ChromeContentRendererClient* client =
795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      static_cast<ChromeContentRendererClient*>(content_renderer_client_.get());
805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  client->GetExtensionDispatcherForTest()->OnRenderProcessShutdown();
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(LEAK_SANITIZER)
84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Do this before shutting down V8 in RenderViewTest::TearDown().
85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // http://crbug.com/328552
86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  __lsan_do_leak_check();
87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  content::RenderViewTest::TearDown();
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
9123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)content::ContentClient* ChromeRenderViewTest::CreateContentClient() {
9223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  return new ChromeContentClient();
9323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
9423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
9523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)content::ContentBrowserClient*
9623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ChromeRenderViewTest::CreateContentBrowserClient() {
9723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  return new chrome::ChromeContentBrowserClient();
9823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
9923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
10023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)content::ContentRendererClient*
10123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ChromeRenderViewTest::CreateContentRendererClient() {
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ChromeContentRendererClient* client = new ChromeContentRendererClient();
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_EXTENSIONS)
104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  extension_dispatcher_delegate_.reset(
105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      new ChromeExtensionsDispatcherDelegate());
106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  client->SetExtensionDispatcherForTest(
107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      new extensions::Dispatcher(extension_dispatcher_delegate_.get()));
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
10923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SPELLCHECK)
11023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  client->SetSpellcheck(new SpellCheck());
11123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif
11223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  return client;
11323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
114