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 "android_webview/browser/aw_browser_main_parts.h" 6 7 #include "android_webview/browser/aw_browser_context.h" 8 #include "android_webview/browser/aw_result_codes.h" 9 #include "base/android/build_info.h" 10 #include "base/android/memory_pressure_listener_android.h" 11 #include "base/command_line.h" 12 #include "base/files/file_path.h" 13 #include "base/path_service.h" 14 #include "content/public/browser/render_process_host.h" 15 #include "content/public/common/content_client.h" 16 #include "content/public/common/content_switches.h" 17 #include "content/public/common/result_codes.h" 18 #include "content/public/common/url_utils.h" 19 #include "gpu/command_buffer/service/mailbox_synchronizer.h" 20 #include "net/android/network_change_notifier_factory_android.h" 21 #include "net/base/network_change_notifier.h" 22 #include "ui/base/l10n/l10n_util_android.h" 23 #include "ui/base/layout.h" 24 #include "ui/base/resource/resource_bundle.h" 25 #include "ui/base/ui_base_paths.h" 26 27 namespace android_webview { 28 29 AwBrowserMainParts::AwBrowserMainParts(AwBrowserContext* browser_context) 30 : browser_context_(browser_context) { 31 } 32 33 AwBrowserMainParts::~AwBrowserMainParts() { 34 } 35 36 void AwBrowserMainParts::PreEarlyInitialization() { 37 net::NetworkChangeNotifier::SetFactory( 38 new net::NetworkChangeNotifierFactoryAndroid()); 39 40 // Android WebView does not use default MessageLoop. It has its own 41 // Android specific MessageLoop. Also see MainMessageLoopRun. 42 DCHECK(!main_message_loop_.get()); 43 main_message_loop_.reset(new base::MessageLoop(base::MessageLoop::TYPE_UI)); 44 base::MessageLoopForUI::current()->Start(); 45 } 46 47 int AwBrowserMainParts::PreCreateThreads() { 48 ui::ResourceBundle::InitSharedInstanceLocaleOnly( 49 l10n_util::GetDefaultLocale(), NULL); 50 51 base::FilePath pak_path; 52 PathService::Get(ui::DIR_RESOURCE_PAKS_ANDROID, &pak_path); 53 54 ui::ResourceBundle::GetSharedInstance().AddDataPackFromPath( 55 pak_path.AppendASCII("webviewchromium.pak"), 56 ui::SCALE_FACTOR_NONE); 57 58 base::android::MemoryPressureListenerAndroid::RegisterSystemCallback( 59 base::android::AttachCurrentThread()); 60 61 return content::RESULT_CODE_NORMAL_EXIT; 62 } 63 64 void AwBrowserMainParts::PreMainMessageLoopRun() { 65 if (!gpu::gles2::MailboxSynchronizer::Initialize()) { 66 CommandLine::ForCurrentProcess()->AppendSwitch( 67 switches::kDisableAccelerated2dCanvas); 68 } 69 70 browser_context_->PreMainMessageLoopRun(); 71 // This is needed for WebView Classic backwards compatibility 72 // See crbug.com/298495 73 content::SetMaxURLChars(20 * 1024 * 1024); 74 } 75 76 bool AwBrowserMainParts::MainMessageLoopRun(int* result_code) { 77 // Android WebView does not use default MessageLoop. It has its own 78 // Android specific MessageLoop. 79 return true; 80 } 81 82 } // namespace android_webview 83