Index: content/test/test_web_contents_factory.cc |
diff --git a/content/test/test_web_contents_factory.cc b/content/test/test_web_contents_factory.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0bf7a015bc5f2e8d6275272f4489550856395b3f |
--- /dev/null |
+++ b/content/test/test_web_contents_factory.cc |
@@ -0,0 +1,53 @@ |
+// Copyright 2015 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 "content/public/test/test_web_contents_factory.h" |
+ |
+#include "base/run_loop.h" |
+#include "content/public/browser/web_contents.h" |
+#include "content/public/test/test_renderer_host.h" |
+#include "content/public/test/web_contents_tester.h" |
+ |
+#if defined(USE_AURA) |
+#include "ui/aura/env.h" |
+#endif |
+ |
+namespace content { |
+ |
+TestWebContentsFactory::TestWebContentsFactory() |
+ : rvh_enabler_(new content::RenderViewHostTestEnabler()), |
+ tear_down_aura_(false) { |
+#if defined(USE_AURA) |
+ if (aura::Env::GetInstanceDontCreate() == nullptr) { |
+ aura::Env::CreateInstance(true); |
+ tear_down_aura_ = true; |
+ } |
+#endif |
+} |
+ |
+TestWebContentsFactory::~TestWebContentsFactory() { |
+ // We explicitly clear the vector to force destruction of any created web |
+ // contents so that we can properly handle their cleanup (running posted |
+ // tasks, etc). |
+ web_contents_.clear(); |
+ // Let any posted tasks for web contents deletion run. |
+ base::RunLoop().RunUntilIdle(); |
+ rvh_enabler_.reset(); |
+ // Let any posted tasks for RenderProcess/ViewHost deletion run. |
+ base::RunLoop().RunUntilIdle(); |
+#if defined(USE_AURA) |
+ if (tear_down_aura_) |
+ aura::Env::DeleteInstance(); |
+#endif |
+} |
+ |
+WebContents* TestWebContentsFactory::CreateWebContents( |
+ BrowserContext* context) { |
+ web_contents_.push_back( |
+ WebContentsTester::CreateTestWebContents(context, nullptr)); |
+ DCHECK(web_contents_.back()); |
+ return web_contents_.back(); |
+} |
+ |
+} // namespace content |