diff options
author | paulmiller <paulmiller@chromium.org> | 2016-01-04 16:50:19 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-05 00:51:20 +0000 |
commit | 5bc628b55810289b6ebb269da47642b929eaf42d (patch) | |
tree | f05214cca24a1c5d209c0d82b234c54944188e5b /android_webview | |
parent | aa1c4ced03fe5890aa8cd2e330b939ee3accf02a (diff) | |
download | chromium_src-5bc628b55810289b6ebb269da47642b929eaf42d.zip chromium_src-5bc628b55810289b6ebb269da47642b929eaf42d.tar.gz chromium_src-5bc628b55810289b6ebb269da47642b929eaf42d.tar.bz2 |
WebView Metrics client implementation (Chromium part)
BUG=546754
Review URL: https://codereview.chromium.org/1474483004
Cr-Commit-Position: refs/heads/master@{#367433}
Diffstat (limited to 'android_webview')
17 files changed, 451 insertions, 8 deletions
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn index 9a22539..95fe942 100644 --- a/android_webview/BUILD.gn +++ b/android_webview/BUILD.gn @@ -394,6 +394,8 @@ source_set("common") { "browser/aw_message_port_message_filter.cc", "browser/aw_message_port_message_filter.h", "browser/aw_message_port_service.h", + "browser/aw_metrics_service_client.cc", + "browser/aw_metrics_service_client.h", "browser/aw_permission_manager.cc", "browser/aw_permission_manager.h", "browser/aw_pref_store.cc", @@ -523,6 +525,11 @@ source_set("common") { "//components/crash/content/browser", "//components/data_reduction_proxy/core/browser", "//components/devtools_discovery", + "//components/metrics", + "//components/metrics:gpu", + "//components/metrics:net", + "//components/metrics:profiler", + "//components/metrics:ui", "//components/navigation_interception", "//components/printing/browser", "//components/printing/common", diff --git a/android_webview/DEPS b/android_webview/DEPS index d45fa05..b53964d 100644 --- a/android_webview/DEPS +++ b/android_webview/DEPS @@ -9,6 +9,7 @@ include_rules = [ "+components/data_reduction_proxy", "+components/devtools_discovery", + "+components/metrics", "+content/public/common", "+crypto", "+gpu", diff --git a/android_webview/android_webview.gyp b/android_webview/android_webview.gyp index 6b9e7b0..7272bf7 100644 --- a/android_webview/android_webview.gyp +++ b/android_webview/android_webview.gyp @@ -230,6 +230,11 @@ '../components/components.gyp:crash_component', '../components/components.gyp:data_reduction_proxy_core_browser', '../components/components.gyp:devtools_discovery', + '../components/components.gyp:metrics', + '../components/components.gyp:metrics_gpu', + '../components/components.gyp:metrics_net', + '../components/components.gyp:metrics_profiler', + '../components/components.gyp:metrics_ui', '../components/components.gyp:navigation_interception', '../components/components.gyp:printing_common', '../components/components.gyp:printing_browser', @@ -301,6 +306,8 @@ 'browser/aw_message_port_message_filter.cc', 'browser/aw_message_port_message_filter.h', 'browser/aw_message_port_service.h', + 'browser/aw_metrics_service_client.h', + 'browser/aw_metrics_service_client.cc', 'browser/aw_permission_manager.cc', 'browser/aw_permission_manager.h', 'browser/aw_pref_store.cc', diff --git a/android_webview/browser/aw_browser_context.cc b/android_webview/browser/aw_browser_context.cc index 2646287..098b955 100644 --- a/android_webview/browser/aw_browser_context.cc +++ b/android_webview/browser/aw_browser_context.cc @@ -8,6 +8,7 @@ #include "android_webview/browser/aw_browser_policy_connector.h" #include "android_webview/browser/aw_form_database_service.h" +#include "android_webview/browser/aw_metrics_service_client.h" #include "android_webview/browser/aw_permission_manager.h" #include "android_webview/browser/aw_pref_store.h" #include "android_webview/browser/aw_quota_manager_bridge.h" @@ -29,6 +30,7 @@ #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" #include "components/data_reduction_proxy/core/browser/data_store.h" #include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h" +#include "components/metrics/metrics_service.h" #include "components/policy/core/browser/browser_policy_connector_base.h" #include "components/policy/core/browser/configuration_policy_pref_store.h" #include "components/policy/core/browser/url_blacklist_manager.h" @@ -253,6 +255,13 @@ void AwBrowserContext::PreMainMessageLoopRun() { data_reduction_proxy_settings_->MaybeActivateDataReductionProxy(true); blacklist_manager_.reset(CreateURLBlackListManager(user_pref_service_.get())); + + AwMetricsServiceClient::GetInstance()->Initialize(user_pref_service_.get(), + GetRequestContext()); +} + +void AwBrowserContext::PostMainMessageLoopRun() { + AwMetricsServiceClient::GetInstance()->Finalize(); } void AwBrowserContext::AddVisitedURLs(const std::vector<GURL>& urls) { @@ -333,6 +342,8 @@ void AwBrowserContext::InitUserPrefService() { pref_registry->RegisterStringPref(prefs::kAuthAndroidNegotiateAccountType, std::string()); + metrics::MetricsService::RegisterPrefs(pref_registry); + base::PrefServiceFactory pref_service_factory; pref_service_factory.set_user_prefs(make_scoped_refptr(new AwPrefStore())); pref_service_factory.set_managed_prefs( diff --git a/android_webview/browser/aw_browser_context.h b/android_webview/browser/aw_browser_context.h index 47ccb80..1702617 100644 --- a/android_webview/browser/aw_browser_context.h +++ b/android_webview/browser/aw_browser_context.h @@ -9,6 +9,7 @@ #include "android_webview/browser/aw_download_manager_delegate.h" #include "android_webview/browser/aw_message_port_service.h" +#include "android_webview/browser/aw_metrics_service_client.h" #include "android_webview/browser/aw_ssl_host_state_delegate.h" #include "base/compiler_specific.h" #include "base/files/file_path.h" @@ -84,8 +85,9 @@ class AwBrowserContext : public content::BrowserContext, static void SetDataReductionProxyEnabled(bool enabled); static void SetLegacyCacheRemovalDelayForTest(int delay_ms); - // Maps to BrowserMainParts::PreMainMessageLoopRun. + // These map to BrowserMainParts::Pre/PostMainMessageLoopRun. void PreMainMessageLoopRun(); + void PostMainMessageLoopRun(); // These methods map to Add methods in visitedlink::VisitedLinkMaster. void AddVisitedURLs(const std::vector<GURL>& urls); @@ -100,17 +102,12 @@ class AwBrowserContext : public content::BrowserContext, content::URLRequestInterceptorScopedVector request_interceptors); AwQuotaManagerBridge* GetQuotaManagerBridge(); - AwFormDatabaseService* GetFormDatabaseService(); - data_reduction_proxy::DataReductionProxySettings* GetDataReductionProxySettings(); - data_reduction_proxy::DataReductionProxyIOData* GetDataReductionProxyIOData(); - AwURLRequestContextGetter* GetAwURLRequestContext(); - AwMessagePortService* GetMessagePortService(); policy::URLBlacklistManager* GetURLBlacklistManager(); diff --git a/android_webview/browser/aw_browser_main_parts.cc b/android_webview/browser/aw_browser_main_parts.cc index d0fe336c..04d9c68 100644 --- a/android_webview/browser/aw_browser_main_parts.cc +++ b/android_webview/browser/aw_browser_main_parts.cc @@ -90,6 +90,10 @@ void AwBrowserMainParts::PreMainMessageLoopRun() { content::RenderFrameHost::AllowInjectingJavaScriptForAndroidWebView(); } +void AwBrowserMainParts::PostMainMessageLoopRun() { + browser_context_->PostMainMessageLoopRun(); +} + bool AwBrowserMainParts::MainMessageLoopRun(int* result_code) { // Android WebView does not use default MessageLoop. It has its own // Android specific MessageLoop. diff --git a/android_webview/browser/aw_browser_main_parts.h b/android_webview/browser/aw_browser_main_parts.h index 976446c..2818549 100644 --- a/android_webview/browser/aw_browser_main_parts.h +++ b/android_webview/browser/aw_browser_main_parts.h @@ -27,6 +27,7 @@ class AwBrowserMainParts : public content::BrowserMainParts { void PreEarlyInitialization() override; int PreCreateThreads() override; void PreMainMessageLoopRun() override; + void PostMainMessageLoopRun() override; bool MainMessageLoopRun(int* result_code) override; private: diff --git a/android_webview/browser/aw_metrics_service_client.cc b/android_webview/browser/aw_metrics_service_client.cc new file mode 100644 index 0000000..16622b0 --- /dev/null +++ b/android_webview/browser/aw_metrics_service_client.cc @@ -0,0 +1,190 @@ +// 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 "android_webview/browser/aw_metrics_service_client.h" + +#include "android_webview/common/aw_version_info_values.h" +#include "base/bind.h" +#include "base/i18n/rtl.h" +#include "base/prefs/pref_service.h" +#include "components/metrics/call_stack_profile_metrics_provider.h" +#include "components/metrics/gpu/gpu_metrics_provider.h" +#include "components/metrics/metrics_service.h" +#include "components/metrics/metrics_state_manager.h" +#include "components/metrics/net/net_metrics_log_uploader.h" +#include "components/metrics/profiler/profiler_metrics_provider.h" +#include "components/metrics/ui/screen_info_metrics_provider.h" +#include "components/metrics/url_constants.h" +#include "content/public/browser/browser_thread.h" + +namespace android_webview { + +base::LazyInstance<AwMetricsServiceClient>::Leaky g_lazy_instance_; + +namespace { + +const int kUploadIntervalMinutes = 30; + +// Callbacks for metrics::MetricsStateManager::Create. Store/LoadClientInfo +// allow Windows Chrome to back up ClientInfo. They're no-ops for WebView. + +void StoreClientInfo(const metrics::ClientInfo& client_info) {} + +scoped_ptr<metrics::ClientInfo> LoadClientInfo() { + scoped_ptr<metrics::ClientInfo> client_info; + return client_info; +} + +} // namespace + +// static +AwMetricsServiceClient* AwMetricsServiceClient::GetInstance() { + return g_lazy_instance_.Pointer(); +} + +// static +void AwMetricsServiceClient::Initialize( + PrefService* pref_service, + net::URLRequestContextGetter* request_context) { + DCHECK(!is_initialized_); + + pref_service_ = pref_service; + request_context_ = request_context; + + metrics_state_manager_ = metrics::MetricsStateManager::Create( + pref_service_, base::Bind(&AwMetricsServiceClient::is_reporting_enabled, + base::Unretained(this)), + base::Bind(&StoreClientInfo), base::Bind(&LoadClientInfo)); + + metrics_service_.reset(new ::metrics::MetricsService( + metrics_state_manager_.get(), this, pref_service_)); + + metrics_service_->RegisterMetricsProvider( + scoped_ptr<metrics::MetricsProvider>(new metrics::NetworkMetricsProvider( + content::BrowserThread::GetBlockingPool()))); + + metrics_service_->RegisterMetricsProvider( + scoped_ptr<metrics::MetricsProvider>(new metrics::GPUMetricsProvider)); + + metrics_service_->RegisterMetricsProvider( + scoped_ptr<metrics::MetricsProvider>( + new metrics::ScreenInfoMetricsProvider)); + + metrics_service_->RegisterMetricsProvider( + scoped_ptr<metrics::MetricsProvider>( + new metrics::ProfilerMetricsProvider())); + + metrics_service_->RegisterMetricsProvider( + scoped_ptr<metrics::MetricsProvider>( + new metrics::CallStackProfileMetricsProvider)); + + metrics_service_->InitializeMetricsRecordingState(); + + is_initialized_ = true; + + if (is_reporting_enabled()) + metrics_service_->Start(); +} + +void AwMetricsServiceClient::Finalize() { + DCHECK(is_initialized_); + metrics_service_->Stop(); +} + +void AwMetricsServiceClient::SetMetricsEnabled(bool enabled) { + // If the client is already initialized, apply the setting immediately. + // Otherwise, it will be applied on initialization. + if (is_initialized_ && is_enabled_ != enabled) { + if (enabled) + metrics_service_->Start(); + else + metrics_service_->Stop(); + } + is_enabled_ = enabled; +} + +metrics::MetricsService* AwMetricsServiceClient::GetMetricsService() { + return metrics_service_.get(); +} + +// In Chrome, UMA and Breakpad are enabled/disabled together by the same +// checkbox and they share the same client ID (a.k.a. GUID). SetMetricsClientId +// and OnRecordingDisabled are intended to provide the ID to Breakpad. In +// WebView, UMA and Breakpad are independent, so these are no-ops. + +void AwMetricsServiceClient::SetMetricsClientId(const std::string& client_id) {} + +void AwMetricsServiceClient::OnRecordingDisabled() {} + +bool AwMetricsServiceClient::IsOffTheRecordSessionActive() { + // WebView has no incognito mode. + return false; +} + +int32_t AwMetricsServiceClient::GetProduct() { + // TODO(paulmiller) Switch this to a WebView product once we have a log source + // for WebView. + return ::metrics::ChromeUserMetricsExtension::CHROME; +} + +std::string AwMetricsServiceClient::GetApplicationLocale() { + return base::i18n::GetConfiguredLocale(); +} + +bool AwMetricsServiceClient::GetBrand(std::string* brand_code) { + // WebView doesn't use brand codes. + return false; +} + +metrics::SystemProfileProto::Channel AwMetricsServiceClient::GetChannel() { + // "Channel" means stable, beta, etc. WebView doesn't have channel info yet. + // TODO(paulmiller) Update this once we have channel info. + return metrics::SystemProfileProto::CHANNEL_UNKNOWN; +} + +std::string AwMetricsServiceClient::GetVersionString() { + return PRODUCT_VERSION; +} + +void AwMetricsServiceClient::OnLogUploadComplete() {} + +void AwMetricsServiceClient::InitializeSystemProfileMetrics( + const base::Closure& done_callback) { + done_callback.Run(); +} + +void AwMetricsServiceClient::CollectFinalMetricsForLog( + const base::Closure& done_callback) { + done_callback.Run(); +} + +scoped_ptr<metrics::MetricsLogUploader> AwMetricsServiceClient::CreateUploader( + const base::Callback<void(int)>& on_upload_complete) { + return scoped_ptr<::metrics::MetricsLogUploader>( + new metrics::NetMetricsLogUploader( + request_context_, + // TODO(paulmiller): Switch this to metrics::kDefaultMetricsServerUrl + // once we have a log source for WebView. + "http://localhost:10000/uma/v2", metrics::kDefaultMetricsMimeType, + on_upload_complete)); +} + +base::TimeDelta AwMetricsServiceClient::GetStandardUploadInterval() { + return base::TimeDelta::FromMinutes(kUploadIntervalMinutes); +} + +AwMetricsServiceClient::AwMetricsServiceClient() + : is_initialized_(false), + is_enabled_(false), + pref_service_(nullptr), + request_context_(nullptr) {} + +AwMetricsServiceClient::~AwMetricsServiceClient() {} + +bool AwMetricsServiceClient::is_reporting_enabled() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + return is_enabled_; +} + +} // namespace android_webview diff --git a/android_webview/browser/aw_metrics_service_client.h b/android_webview/browser/aw_metrics_service_client.h new file mode 100644 index 0000000..3b6f2e0 --- /dev/null +++ b/android_webview/browser/aw_metrics_service_client.h @@ -0,0 +1,84 @@ +// 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. + +#ifndef ANDROID_WEBVIEW_BROWSER_AW_METRICS_SERVICE_CLIENT_IMPL_H_ +#define ANDROID_WEBVIEW_BROWSER_AW_METRICS_SERVICE_CLIENT_IMPL_H_ + +#include "android_webview/browser/aw_metrics_service_client.h" + +#include <string> + +#include "base/lazy_instance.h" +#include "base/macros.h" +#include "base/memory/scoped_ptr.h" +#include "components/metrics/metrics_service_client.h" + +class PrefService; + +namespace metrics { +struct ClientInfo; +class MetricsStateManager; +} + +namespace net { +class URLRequestContextGetter; +} + +namespace android_webview { + +// This singleton manages metrics for an app using any number of WebViews. +// Metrics is turned on and off by the homonymous Java class. It should only be +// used on the main thread. In particular, Initialize, Finalize, and +// SetMetricsEnabled must be called from the same thread, in order to prevent +// enable/disable race conditions, and because MetricsService is +// single-threaded. +class AwMetricsServiceClient : public metrics::MetricsServiceClient { + friend struct base::DefaultLazyInstanceTraits<AwMetricsServiceClient>; + + public: + static AwMetricsServiceClient* GetInstance(); + + void Initialize(PrefService* pref_service, + net::URLRequestContextGetter* request_context); + void Finalize(); + void SetMetricsEnabled(bool enabled); + + // metrics::MetricsServiceClient implementation + metrics::MetricsService* GetMetricsService() override; + void SetMetricsClientId(const std::string& client_id) override; + void OnRecordingDisabled() override; + bool IsOffTheRecordSessionActive() override; + int32_t GetProduct() override; + std::string GetApplicationLocale() override; + bool GetBrand(std::string* brand_code) override; + metrics::SystemProfileProto::Channel GetChannel() override; + std::string GetVersionString() override; + void OnLogUploadComplete() override; + void InitializeSystemProfileMetrics( + const base::Closure& done_callback) override; + void CollectFinalMetricsForLog(const base::Closure& done_callback) override; + scoped_ptr<metrics::MetricsLogUploader> CreateUploader( + const base::Callback<void(int)>& on_upload_complete) override; + base::TimeDelta GetStandardUploadInterval() override; + + private: + AwMetricsServiceClient(); + ~AwMetricsServiceClient() override; + + // Callback for metrics::MetricsStateManager::Create + bool is_reporting_enabled(); + + bool is_initialized_; + bool is_enabled_; + PrefService* pref_service_; + net::URLRequestContextGetter* request_context_; + scoped_ptr<metrics::MetricsStateManager> metrics_state_manager_; + scoped_ptr<metrics::MetricsService> metrics_service_; + + DISALLOW_COPY_AND_ASSIGN(AwMetricsServiceClient); +}; + +} // namespace android_webview + +#endif // ANDROID_WEBVIEW_BROWSER_AW_METRICS_SERVICE_CLIENT_IMPL_H_ diff --git a/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java b/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java index ea5a637..3d62926 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java +++ b/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java @@ -26,9 +26,11 @@ public class AwBrowserContext { private AwFormDatabase mFormDatabase; private HttpAuthDatabase mHttpAuthDatabase; private AwMessagePortService mMessagePortService; + private AwMetricsServiceClient mMetricsServiceClient; public AwBrowserContext(SharedPreferences sharedPreferences, Context applicationContext) { mSharedPreferences = sharedPreferences; + mMetricsServiceClient = new AwMetricsServiceClient(applicationContext); } public AwGeolocationPermissions getGeolocationPermissions() { @@ -59,6 +61,10 @@ public class AwBrowserContext { return mMessagePortService; } + public AwMetricsServiceClient getMetricsServiceClient() { + return mMetricsServiceClient; + } + /** * @see android.webkit.WebView#pauseTimers() */ diff --git a/android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java b/android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java new file mode 100644 index 0000000..7775fb2 --- /dev/null +++ b/android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java @@ -0,0 +1,29 @@ +// 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. + +package org.chromium.android_webview; + +import android.content.Context; +import android.webkit.ValueCallback; + +import org.chromium.base.annotations.JNINamespace; + +/** + * Java twin of the homonymous C++ class. The Java side is only responsible for + * switching metrics on and off. Since the setting is a platform feature, it + * must be obtained through PlatformServiceBridge. + */ +@JNINamespace("android_webview") +public class AwMetricsServiceClient { + public AwMetricsServiceClient(Context applicationContext) { + PlatformServiceBridge.getInstance(applicationContext) + .setMetricsSettingListener(new ValueCallback<Boolean>() { + public void onReceiveValue(Boolean enabled) { + nativeSetMetricsEnabled(enabled); + } + }); + } + + public static native void nativeSetMetricsEnabled(boolean enabled); +} diff --git a/android_webview/java/src/org/chromium/android_webview/PlatformServiceBridge.java b/android_webview/java/src/org/chromium/android_webview/PlatformServiceBridge.java new file mode 100644 index 0000000..4051c23 --- /dev/null +++ b/android_webview/java/src/org/chromium/android_webview/PlatformServiceBridge.java @@ -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. + +package org.chromium.android_webview; + +import android.content.Context; +import android.webkit.ValueCallback; + +import org.chromium.base.Log; + +import java.lang.reflect.InvocationTargetException; + +/** + * This class manages platform-specific services. (i.e. Google Services) The platform + * should extend this class and use this base class to fetch their specialized version. + */ +public class PlatformServiceBridge { + private static final String TAG = "PlatformServiceBrid-"; + private static final String PLATFORM_SERVICE_BRIDGE = + "com.android.webview.chromium.PlatformServiceBridgeGoogle"; + + private static PlatformServiceBridge sInstance; + + protected PlatformServiceBridge() {} + + public static PlatformServiceBridge getInstance(Context applicationContext) { + if (sInstance != null) { + return sInstance; + } + + // Try to get a specialized service bridge. + try { + Class<?> cls = Class.forName(PLATFORM_SERVICE_BRIDGE); + sInstance = (PlatformServiceBridge) cls.getDeclaredConstructor(Context.class) + .newInstance(applicationContext); + return sInstance; + } catch (ClassNotFoundException e) { + // This is not an error; it just means this device doesn't have specialized services. + } catch (IllegalAccessException | IllegalArgumentException | InstantiationException + | NoSuchMethodException e) { + Log.e(TAG, "Failed to get " + PLATFORM_SERVICE_BRIDGE + ": " + e); + } catch (InvocationTargetException e) { + Log.e(TAG, "Failed invocation to get " + PLATFORM_SERVICE_BRIDGE + ":", e.getCause()); + } + + // Otherwise, get the generic service bridge. + sInstance = new PlatformServiceBridge(); + return sInstance; + } + + public void setMetricsSettingListener(ValueCallback<Boolean> callback) {} +} diff --git a/android_webview/native/BUILD.gn b/android_webview/native/BUILD.gn index cec2c0e..c4dbb20 100644 --- a/android_webview/native/BUILD.gn +++ b/android_webview/native/BUILD.gn @@ -28,7 +28,10 @@ source_set("native") { "//ui/gfx/geometry:geometry", ] - include_dirs = [ "//skia/config" ] + include_dirs = [ + "//skia/config", + "//third_party/protobuf", + ] sources = [ "android_protocol_handler.cc", @@ -65,6 +68,8 @@ source_set("native") { "aw_media_url_interceptor.h", "aw_message_port_service_impl.cc", "aw_message_port_service_impl.h", + "aw_metrics_switch.cc", + "aw_metrics_switch.h", "aw_pdf_exporter.cc", "aw_pdf_exporter.h", "aw_picture.cc", @@ -128,6 +133,7 @@ generate_jni("native_jni") { "../java/src/org/chromium/android_webview/AwFormDatabase.java", "../java/src/org/chromium/android_webview/AwHttpAuthHandler.java", "../java/src/org/chromium/android_webview/AwMessagePortService.java", + "../java/src/org/chromium/android_webview/AwMetricsServiceClient.java", "../java/src/org/chromium/android_webview/AwPdfExporter.java", "../java/src/org/chromium/android_webview/AwPicture.java", "../java/src/org/chromium/android_webview/AwQuotaManagerBridge.java", diff --git a/android_webview/native/android_webview_jni_registrar.cc b/android_webview/native/android_webview_jni_registrar.cc index a585d7e..cd353ec 100644 --- a/android_webview/native/android_webview_jni_registrar.cc +++ b/android_webview/native/android_webview_jni_registrar.cc @@ -17,6 +17,7 @@ #include "android_webview/native/aw_form_database.h" #include "android_webview/native/aw_http_auth_handler.h" #include "android_webview/native/aw_message_port_service_impl.h" +#include "android_webview/native/aw_metrics_switch.h" #include "android_webview/native/aw_pdf_exporter.h" #include "android_webview/native/aw_picture.h" #include "android_webview/native/aw_quota_manager_bridge_impl.h" @@ -50,6 +51,7 @@ static base::android::RegistrationMethod kWebViewRegisteredMethods[] = { { "AwPicture", RegisterAwPicture }, { "AwSettings", RegisterAwSettings }, { "AwHttpAuthHandler", RegisterAwHttpAuthHandler }, + { "AwMetricsServiceClient", RegisterAwMetricsServiceClient }, { "AwPdfExporter", RegisterAwPdfExporter }, { "AwPermissionRequest", RegisterAwPermissionRequest }, { "AwQuotaManagerBridge", RegisterAwQuotaManagerBridge }, diff --git a/android_webview/native/aw_metrics_switch.cc b/android_webview/native/aw_metrics_switch.cc new file mode 100644 index 0000000..44ab70a --- /dev/null +++ b/android_webview/native/aw_metrics_switch.cc @@ -0,0 +1,23 @@ +// 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 "android_webview/native/aw_metrics_switch.h" + +#include "android_webview/browser/aw_metrics_service_client.h" +#include "android_webview/jni/AwMetricsServiceClient_jni.h" + +namespace android_webview { + +static void SetMetricsEnabled( + JNIEnv* env, + const base::android::JavaParamRef<jclass>& jcaller, + jboolean enabled) { + AwMetricsServiceClient::GetInstance()->SetMetricsEnabled(enabled); +} + +bool RegisterAwMetricsServiceClient(JNIEnv* env) { + return RegisterNativesImpl(env); +} + +} // namespace android_webview diff --git a/android_webview/native/aw_metrics_switch.h b/android_webview/native/aw_metrics_switch.h new file mode 100644 index 0000000..3f07a60 --- /dev/null +++ b/android_webview/native/aw_metrics_switch.h @@ -0,0 +1,16 @@ +// 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. + +#ifndef ANDROID_WEBVIEW_NATIVE_AW_METRICS_SWITCH_ +#define ANDROID_WEBVIEW_NATIVE_AW_METRICS_SWITCH_ + +#include <jni.h> + +namespace android_webview { + +bool RegisterAwMetricsServiceClient(JNIEnv* env); + +} // namespace android_webview + +#endif // ANDROID_WEBVIEW_NATIVE_AW_METRICS_SWITCH_ diff --git a/android_webview/native/webview_native.gyp b/android_webview/native/webview_native.gyp index 97d941e..1a89e19 100644 --- a/android_webview/native/webview_native.gyp +++ b/android_webview/native/webview_native.gyp @@ -4,6 +4,7 @@ { 'variables': { 'chromium_code': 1, + 'protoc_out_dir': '<(SHARED_INTERMEDIATE_DIR)/protoc_out', }, 'targets': [ { @@ -32,6 +33,8 @@ 'include_dirs': [ '../..', '../../skia/config', + '../../third_party/protobuf/src', + '<(protoc_out_dir)', ], 'sources': [ 'android_protocol_handler.cc', @@ -67,7 +70,9 @@ 'aw_media_url_interceptor.cc', 'aw_media_url_interceptor.h', 'aw_message_port_service_impl.cc', - 'aw_messagE_port_service_impl.h', + 'aw_message_port_service_impl.h', + 'aw_metrics_switch.cc', + 'aw_metrics_switch.h', 'aw_pdf_exporter.cc', 'aw_pdf_exporter.h', 'aw_picture.cc', @@ -145,6 +150,7 @@ '../java/src/org/chromium/android_webview/AwFormDatabase.java', '../java/src/org/chromium/android_webview/AwHttpAuthHandler.java', '../java/src/org/chromium/android_webview/AwMessagePortService.java', + '../java/src/org/chromium/android_webview/AwMetricsServiceClient.java', '../java/src/org/chromium/android_webview/AwPdfExporter.java', '../java/src/org/chromium/android_webview/AwPicture.java', '../java/src/org/chromium/android_webview/AwQuotaManagerBridge.java', |