aw_browser_main_parts.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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
27namespace android_webview {
28
29AwBrowserMainParts::AwBrowserMainParts(AwBrowserContext* browser_context)
30    : browser_context_(browser_context) {
31}
32
33AwBrowserMainParts::~AwBrowserMainParts() {
34}
35
36void 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::MessageLoopForUI);
44  base::MessageLoopForUI::current()->Start();
45}
46
47int 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
64void 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
76bool 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