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

Unified Diff: chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc

Issue 2938443002: [GRC] UKM Support (Closed)
Patch Set: Address reviewer feedback Created 3 years, 6 months 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc
diff --git a/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc b/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc
index 62d5c11edb6d276be915cdf0ed390c7b5add2efa..7adf73b56980dc5ec11585bee1f120e79c7996c1 100644
--- a/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc
+++ b/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc
@@ -4,21 +4,72 @@
#include "chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.h"
+#include <utility>
+
+#include "components/ukm/public/interfaces/ukm_interface.mojom.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/common/service_manager_connection.h"
+#include "content/public/common/service_names.mojom.h"
#include "services/resource_coordinator/public/cpp/resource_coordinator_features.h"
+#include "services/resource_coordinator/public/interfaces/service_callbacks.mojom.h"
+#include "services/resource_coordinator/public/interfaces/service_constants.mojom.h"
+#include "services/service_manager/public/cpp/connector.h"
DEFINE_WEB_CONTENTS_USER_DATA_KEY(ResourceCoordinatorWebContentsObserver);
+bool ResourceCoordinatorWebContentsObserver::ukm_recorder_initialized = false;
+
ResourceCoordinatorWebContentsObserver::ResourceCoordinatorWebContentsObserver(
content::WebContents* web_contents)
: WebContentsObserver(web_contents) {
+ service_manager::Connector* connector =
+ content::ServiceManagerConnection::GetForProcess()->GetConnector();
+
tab_resource_coordinator_ =
base::MakeUnique<resource_coordinator::ResourceCoordinatorInterface>(
- content::ServiceManagerConnection::GetForProcess()->GetConnector(),
- resource_coordinator::CoordinationUnitType::kWebContents);
+ connector, resource_coordinator::CoordinationUnitType::kWebContents);
+
+ connector->BindInterface(resource_coordinator::mojom::kServiceName,
+ mojo::MakeRequest(&service_callbacks_));
+
+ EnsureUkmRecorderInterface();
+}
+
+// TODO(matthalp) integrate into ResourceCoordinatorService once the UKM mojo
+// interface can be accessed directly within GRC. GRC cannot currently use
+// the UKM mojo inteface directly because of software layering issues
+// (i.e. the UKM mojo interface is only reachable from the content_browser
+// service which cannot be accesses by services in the services/ directory).
+// Instead the ResourceCoordinatorWebContentsObserver is used as it lives
+// within the content_browser service and can initialize the
+// UkmRecorderInterface and pass that interface into GRC through
+// resource_coordinator::mojom::ServiceCallbacks.
+void ResourceCoordinatorWebContentsObserver::EnsureUkmRecorderInterface() {
+ if (ukm_recorder_initialized) {
+ return;
+ }
+
+ service_callbacks_->IsUkmRecorderInterfaceInitialized(base::Bind(
+ &ResourceCoordinatorWebContentsObserver::MaybeSetUkmRecorderInterface,
+ base::Unretained(this)));
+}
+
+void ResourceCoordinatorWebContentsObserver::MaybeSetUkmRecorderInterface(
+ bool ukm_recorder_already_initialized) {
+ if (ukm_recorder_already_initialized) {
+ return;
+ }
+
+ ukm::mojom::UkmRecorderInterfacePtr ukm_recorder_interface;
+ content::ServiceManagerConnection::GetForProcess()
+ ->GetConnector()
+ ->BindInterface(content::mojom::kBrowserServiceName,
+ mojo::MakeRequest(&ukm_recorder_interface));
+ service_callbacks_->SetUkmRecorderInterface(
+ std::move(ukm_recorder_interface));
+ ukm_recorder_initialized = true;
}
ResourceCoordinatorWebContentsObserver::

Powered by Google App Engine
This is Rietveld 408576698