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

Side by Side Diff: webkit/support/webkit_support.cc

Issue 8638006: Early create AtExitManager on Android because eraly initialization code on Android needs to acces... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "webkit/support/webkit_support.h" 5 #include "webkit/support/webkit_support.h"
6 6
7 #include "base/at_exit.h" 7 #include "base/at_exit.h"
8 #include "base/base64.h" 8 #include "base/base64.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 120
121 class TestEnvironment { 121 class TestEnvironment {
122 public: 122 public:
123 #if defined(OS_ANDROID) 123 #if defined(OS_ANDROID)
124 // Android UI message loop goes through Java, so don't use it in tests. 124 // Android UI message loop goes through Java, so don't use it in tests.
125 typedef MessageLoop MessageLoopType; 125 typedef MessageLoop MessageLoopType;
126 #else 126 #else
127 typedef MessageLoopForUI MessageLoopType; 127 typedef MessageLoopForUI MessageLoopType;
128 #endif 128 #endif
129 129
130 explicit TestEnvironment(bool unit_test_mode) { 130 // Sometimes we have to create a AtExitManager before initializing
131 // TestEnvironment. Give TestEnvironment a chance to reuse existing
132 // AtExitManager if needed.
133 explicit TestEnvironment(bool unit_test_mode,
tony 2011/11/22 17:28:55 Nit: No explicit.
Johnny(Jianning) Ding 2011/11/23 14:52:17 Done.
134 base::AtExitManager* existing_at_exit_manager) {
131 if (!unit_test_mode) { 135 if (!unit_test_mode) {
132 at_exit_manager_.reset(new base::AtExitManager); 136 if (!existing_at_exit_manager)
137 existing_at_exit_manager = new base::AtExitManager;
138 at_exit_manager_.reset(existing_at_exit_manager);
133 InitLogging(false); 139 InitLogging(false);
134 } 140 }
135 main_message_loop_.reset(new MessageLoopType); 141 main_message_loop_.reset(new MessageLoopType);
136 // TestWebKitPlatformSupport must be instantiated after MessageLoopType. 142 // TestWebKitPlatformSupport must be instantiated after MessageLoopType.
137 webkit_platform_support_.reset( 143 webkit_platform_support_.reset(
138 new TestWebKitPlatformSupport(unit_test_mode)); 144 new TestWebKitPlatformSupport(unit_test_mode));
139 } 145 }
140 146
141 ~TestEnvironment() { 147 ~TestEnvironment() {
142 SimpleResourceLoaderBridge::Shutdown(); 148 SimpleResourceLoaderBridge::Shutdown();
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 // webkit/glue/plugin/plugin_list_posix.cc checks --debug-plugin-loading. 236 // webkit/glue/plugin/plugin_list_posix.cc checks --debug-plugin-loading.
231 // webkit/glue/plugin/plugin_list_win.cc checks --old-wmp. 237 // webkit/glue/plugin/plugin_list_win.cc checks --old-wmp.
232 // If DRT needs these flags, specify them in the following kFixedArguments. 238 // If DRT needs these flags, specify them in the following kFixedArguments.
233 const char* kFixedArguments[] = {"DumpRenderTree"}; 239 const char* kFixedArguments[] = {"DumpRenderTree"};
234 CommandLine::Init(arraysize(kFixedArguments), kFixedArguments); 240 CommandLine::Init(arraysize(kFixedArguments), kFixedArguments);
235 241
236 // Explicitly initialize the GURL library before spawning any threads. 242 // Explicitly initialize the GURL library before spawning any threads.
237 // Otherwise crash may happend when different threads try to create a GURL 243 // Otherwise crash may happend when different threads try to create a GURL
238 // at same time. 244 // at same time.
239 url_util::Initialize(); 245 url_util::Initialize();
246 base::AtExitManager* at_exit_manager = NULL;
tony 2011/11/22 17:28:55 Can we just have all ports create the at_exit_mana
Johnny(Jianning) Ding 2011/11/23 14:52:17 Done.
247 #if defined(OS_ANDROID)
248 // We need to register Android specific paths in BeforeInitialize routine
249 // which are needed by TestEnvironment. Since PathService need a AtExitManager
250 // to register a callback, (See LazyInstanceHelper::CompleteInstance.) we need
251 // to create a AtExitManager before initializing TestEnvironment. We will pass
252 // the ownership of the AtExitManager to TestEnvironment constructor to let
253 // the TestEnvironment instance manage its lifecycle.
254 at_exit_manager = new base::AtExitManager;
255 #endif
240 BeforeInitialize(unit_test_mode); 256 BeforeInitialize(unit_test_mode);
241 test_environment = new TestEnvironment(unit_test_mode); 257 test_environment = new TestEnvironment(unit_test_mode, at_exit_manager);
242 AfterInitialize(unit_test_mode); 258 AfterInitialize(unit_test_mode);
243 if (!unit_test_mode) { 259 if (!unit_test_mode) {
244 // Load ICU data tables. This has to run after TestEnvironment is created 260 // Load ICU data tables. This has to run after TestEnvironment is created
245 // because on Linux, we need base::AtExitManager. 261 // because on Linux, we need base::AtExitManager.
246 icu_util::Initialize(); 262 icu_util::Initialize();
247 } 263 }
248 webkit_glue::SetUserAgent(webkit_glue::BuildUserAgentFromProduct( 264 webkit_glue::SetUserAgent(webkit_glue::BuildUserAgentFromProduct(
249 "DumpRenderTree/0.0.0.0"), false); 265 "DumpRenderTree/0.0.0.0"), false);
250 } 266 }
251 267
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
626 // Logging 642 // Logging
627 void EnableWebCoreLogChannels(const std::string& channels) { 643 void EnableWebCoreLogChannels(const std::string& channels) {
628 webkit_glue::EnableWebCoreLogChannels(channels); 644 webkit_glue::EnableWebCoreLogChannels(channels);
629 } 645 }
630 646
631 void SetGamepadData(const WebKit::WebGamepads& pads) { 647 void SetGamepadData(const WebKit::WebGamepads& pads) {
632 test_environment->webkit_platform_support()->setGamepadData(pads); 648 test_environment->webkit_platform_support()->setGamepadData(pads);
633 } 649 }
634 650
635 } // namespace webkit_support 651 } // namespace webkit_support
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698