[PDP] Add UKM for PDP state

This CL adds the UKM to track if the page is a product page, and if so,
the source of this decision.

UKM approaval: https://docs.google.com/document/d/1M7fYzf90Mx3OBuheP8beAuoFwubtNrXQuYjA5P-kClk/edit#heading=h.8nmrbmye9rnv

Bug: 1491256
Change-Id: I84cb41587c65b38fb2f425a588273f82a48dde51
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5009050
Reviewed-by: Matthew Jones <[email protected]>
Reviewed-by: Alexei Svitkine <[email protected]>
Commit-Queue: Yue Zhang <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1221210}
diff --git a/components/commerce/ios/DEPS b/components/commerce/ios/DEPS
index 6e52228..d0e62f4 100644
--- a/components/commerce/ios/DEPS
+++ b/components/commerce/ios/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
   "+components/grit",
+  "+components/ukm/ios",
   "+ios/web/public",
   "+services/data_decoder/public/cpp",
   "+ui/base",
diff --git a/components/commerce/ios/browser/BUILD.gn b/components/commerce/ios/browser/BUILD.gn
index 248d3ee3..7ffd4c6 100644
--- a/components/commerce/ios/browser/BUILD.gn
+++ b/components/commerce/ios/browser/BUILD.gn
@@ -18,6 +18,7 @@
     "//base",
     "//components/commerce/core:shopping_service",
     "//components/resources:components_resources_grit",
+    "//components/ukm/ios:ukm_url_recorder",
     "//ios/web",
     "//ios/web/public",
     "//ios/web/public/js_messaging",
diff --git a/components/commerce/ios/browser/web_state_wrapper.h b/components/commerce/ios/browser/web_state_wrapper.h
index 0f0fac0..a246780 100644
--- a/components/commerce/ios/browser/web_state_wrapper.h
+++ b/components/commerce/ios/browser/web_state_wrapper.h
@@ -40,6 +40,8 @@
       const std::u16string& script,
       base::OnceCallback<void(const base::Value)> callback) override;
 
+  ukm::SourceId GetPageUkmSourceId() override;
+
   base::WeakPtr<WebWrapper> GetWeakPtr();
 
   void ClearWebStatePointer();
diff --git a/components/commerce/ios/browser/web_state_wrapper.mm b/components/commerce/ios/browser/web_state_wrapper.mm
index dd1a6b4d..a4e169c 100644
--- a/components/commerce/ios/browser/web_state_wrapper.mm
+++ b/components/commerce/ios/browser/web_state_wrapper.mm
@@ -6,6 +6,7 @@
 
 #include "base/functional/bind.h"
 #include "base/values.h"
+#include "components/ukm/ios/ukm_url_recorder.h"
 #include "ios/web/public/browser_state.h"
 #include "ios/web/public/js_messaging/web_frame.h"
 #include "ios/web/public/js_messaging/web_frames_manager.h"
@@ -63,6 +64,11 @@
                       std::move(callback)));
 }
 
+ukm::SourceId WebStateWrapper::GetPageUkmSourceId() {
+  return web_state_ ? ukm::GetSourceIdForWebStateDocument(web_state_)
+                    : ukm::kInvalidSourceId;
+}
+
 void WebStateWrapper::ClearWebStatePointer() {
   web_state_ = nullptr;
 }