Refactor AppPlatformMetrics.

This CL is used to prepare for CL:3110470 to support UKM for web apps
opened in browser tab.

Add 2 separate functions: SetWindowActivated and SetWindowInActivated
to handle the internal data structure when windows are activated and
inactivated.

No function change for this CL. Only refactor to simplify the function
OnInstanceUpdate.

BUG=1243477

Change-Id: I07e39c83b161fd55c1e2b6b527e8c7a92b86be81
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3118199
Reviewed-by: Dominick Ng <dominickn@chromium.org>
Commit-Queue: Nancy Wang <nancylingwang@chromium.org>
Cr-Commit-Position: refs/heads/main@{#915484}
diff --git a/chrome/browser/apps/app_service/app_platform_metrics.cc b/chrome/browser/apps/app_service/app_platform_metrics.cc
index 8c0c8c9..8e6273f 100644
--- a/chrome/browser/apps/app_service/app_platform_metrics.cc
+++ b/chrome/browser/apps/app_service/app_platform_metrics.cc
@@ -730,55 +730,67 @@
   }
 
   bool is_active = update.State() & apps::InstanceState::kActive;
-  auto it = running_start_time_.find(update.InstanceKey());
   if (is_active) {
-    if (it == running_start_time_.end()) {
-      AppTypeName app_type_name =
-          GetAppTypeNameForWindow(profile_, app_type, app_id,
-                                  update.InstanceKey().GetEnclosingAppWindow());
-      if (app_type_name == apps::AppTypeName::kUnknown) {
-        return;
-      }
-
-      // For browser tabs, record the top browser window running duration only,
-      // and skip web apps opened in browser tabs to avoid duration duplicated
-      // calculation.
-      if (app_type_name == AppTypeName::kChromeBrowser &&
-          app_id != extension_misc::kChromeAppId) {
-        return;
-      }
-
-      AppTypeNameV2 app_type_name_v2 =
-          GetAppTypeNameV2(profile_, app_type, app_id,
-                           update.InstanceKey().GetEnclosingAppWindow());
-
-      running_start_time_[update.InstanceKey()].start_time =
-          base::TimeTicks::Now();
-      running_start_time_[update.InstanceKey()].app_type_name = app_type_name;
-      running_start_time_[update.InstanceKey()].app_type_name_v2 =
-          app_type_name_v2;
-
-      ++activated_count_[app_type_name];
-      should_refresh_activated_count_pref = true;
-
-      start_time_per_five_minutes_[update.InstanceKey()].start_time =
-          base::TimeTicks::Now();
-      start_time_per_five_minutes_[update.InstanceKey()].app_type_name =
-          app_type_name;
-      start_time_per_five_minutes_[update.InstanceKey()].app_type_name_v2 =
-          app_type_name_v2;
-      start_time_per_five_minutes_[update.InstanceKey()].app_id = app_id;
+    auto* window = update.InstanceKey().GetEnclosingAppWindow();
+    AppTypeName app_type_name =
+        GetAppTypeNameForWindow(profile_, app_type, app_id, window);
+    if (app_type_name == apps::AppTypeName::kUnknown) {
+      return;
     }
+
+    AppTypeNameV2 app_type_name_v2 =
+        GetAppTypeNameV2(profile_, app_type, app_id, window);
+
+    SetWindowActivated(app_type, app_type_name, app_type_name_v2, app_id,
+                       update.InstanceKey());
     return;
   }
 
-  bool is_close = update.State() & apps::InstanceState::kDestroyed;
-  auto usage_time_it = usage_time_per_five_minutes_.find(update.InstanceKey());
+  SetWindowInActivated(app_id, update.InstanceKey(), update.State());
+}
+
+void AppPlatformMetrics::OnInstanceRegistryWillBeDestroyed(
+    apps::InstanceRegistry* cache) {
+  apps::InstanceRegistry::Observer::Observe(nullptr);
+}
+
+void AppPlatformMetrics::SetWindowActivated(
+    apps::mojom::AppType app_type,
+    AppTypeName app_type_name,
+    AppTypeNameV2 app_type_name_v2,
+    const std::string& app_id,
+    const apps::Instance::InstanceKey& instance_key) {
+  auto it = running_start_time_.find(instance_key);
+  if (it != running_start_time_.end()) {
+    return;
+  }
+
+  running_start_time_[instance_key].start_time = base::TimeTicks::Now();
+  running_start_time_[instance_key].app_type_name = app_type_name;
+  running_start_time_[instance_key].app_type_name_v2 = app_type_name_v2;
+
+  ++activated_count_[app_type_name];
+  should_refresh_activated_count_pref = true;
+
+  start_time_per_five_minutes_[instance_key].start_time =
+      base::TimeTicks::Now();
+  start_time_per_five_minutes_[instance_key].app_type_name = app_type_name;
+  start_time_per_five_minutes_[instance_key].app_type_name_v2 =
+      app_type_name_v2;
+  start_time_per_five_minutes_[instance_key].app_id = app_id;
+}
+
+void AppPlatformMetrics::SetWindowInActivated(
+    const std::string& app_id,
+    const apps::Instance::InstanceKey& instance_key,
+    apps::InstanceState state) {
+  bool is_close = state & apps::InstanceState::kDestroyed;
+  auto usage_time_it = usage_time_per_five_minutes_.find(instance_key);
   if (is_close && usage_time_it != usage_time_per_five_minutes_.end()) {
     usage_time_it->second.window_is_closed = true;
   }
 
-  // The app window is inactivated.
+  auto it = running_start_time_.find(instance_key);
   if (it == running_start_time_.end()) {
     return;
   }
@@ -797,22 +809,17 @@
 
   base::TimeDelta running_time =
       base::TimeTicks::Now() -
-      start_time_per_five_minutes_[update.InstanceKey()].start_time;
+      start_time_per_five_minutes_[instance_key].start_time;
   app_type_running_time_per_five_minutes_[app_type_name] += running_time;
   app_type_v2_running_time_per_five_minutes_[app_type_name_v2] += running_time;
   usage_time_it->second.running_time += running_time;
 
   running_start_time_.erase(it);
-  start_time_per_five_minutes_.erase(update.InstanceKey());
+  start_time_per_five_minutes_.erase(instance_key);
 
   should_refresh_duration_pref = true;
 }
 
-void AppPlatformMetrics::OnInstanceRegistryWillBeDestroyed(
-    apps::InstanceRegistry* cache) {
-  apps::InstanceRegistry::Observer::Observe(nullptr);
-}
-
 void AppPlatformMetrics::InitRunningDuration() {
   DictionaryPrefUpdate running_duration_update(profile_->GetPrefs(),
                                                kAppRunningDuration);
diff --git a/chrome/browser/apps/app_service/app_platform_metrics.h b/chrome/browser/apps/app_service/app_platform_metrics.h
index c73ef04..2387d6d 100644
--- a/chrome/browser/apps/app_service/app_platform_metrics.h
+++ b/chrome/browser/apps/app_service/app_platform_metrics.h
@@ -203,6 +203,15 @@
   void OnInstanceRegistryWillBeDestroyed(
       apps::InstanceRegistry* cache) override;
 
+  void SetWindowActivated(apps::mojom::AppType app_type,
+                          AppTypeName app_type_name,
+                          AppTypeNameV2 app_type_name_v2,
+                          const std::string& app_id,
+                          const apps::Instance::InstanceKey& instance_key);
+  void SetWindowInActivated(const std::string& app_id,
+                            const apps::Instance::InstanceKey& instance_key,
+                            apps::InstanceState state);
+
   void InitRunningDuration();
   void ClearRunningDuration();