Diagnostics: Conform to responsiveness spec

Screenshot: http://shortn/_fvSN9f0N5B

Spec: https://carbon.googleplex.com/cros-ux/pages/diagnostics/mvp

Bug: 1125150
Test: browser_tests --gtest_filter=DiagnosticsApp*
Change-Id: I7cc40e2e25f10c700ffb92bbaefc52a5ec63be62
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2567930
Commit-Queue: Michael Checo <michaelcheco@google.com>
Reviewed-by: Zentaro Kavanagh <zentaro@chromium.org>
Reviewed-by: Jesse Schettler <jschettler@chromium.org>
Reviewed-by: Joon Ahn <joonbug@chromium.org>
Cr-Commit-Position: refs/heads/master@{#833516}
diff --git a/chromeos/components/diagnostics_ui/resources/diagnostics_app.html b/chromeos/components/diagnostics_ui/resources/diagnostics_app.html
index 82b42260..41d3325 100644
--- a/chromeos/components/diagnostics_ui/resources/diagnostics_app.html
+++ b/chromeos/components/diagnostics_ui/resources/diagnostics_app.html
@@ -1,16 +1,28 @@
 <style include="cr-shared-style diagnostics-shared diagnostics-fonts">
+  .card-width {
+    width: 100%;
+  }
+
   .diagonstics-cards-container {
     align-items: center;
     display: flex;
     flex-direction: column;
+    padding-inline: var(--container-padding);
+    width: var(--content-container-width);
   }
 
   #diagnosticsContainer {
-    --cr-centered-card-max-width: 820px;
+    align-items: center;
+    box-sizing: border-box;
+    display: flex;
+    flex-direction: column;
+    height: inherit;
+    position: relative;
   }
 
   #header {
-   @apply --diagnostics-header-font;
+    @apply --diagnostics-header-font;
+    align-self: flex-start;
     margin-bottom: 10px;
   }
 
@@ -31,23 +43,29 @@
     padding: 5px;
   }
 </style>
-<div id="diagnosticsContainer"class="cr-centered-card-container">
+<div id="diagnosticsContainer">
   <div id="header">[[i18n('diagnosticsTitle')]]</div>
   <div class="overview-container">
     <overview-card id="overviewCard"></overview-card>
   </div>
   <div class="diagonstics-cards-container">
     <template is="dom-if" if="[[showBatteryStatusCard_]]" restamp>
-      <battery-status-card id="batteryStatusCard"
-        is-test-running="{{isTestRunning}}">
-      </battery-status-card>
+      <div class="card-width">
+        <battery-status-card id="batteryStatusCard"
+          is-test-running="{{isTestRunning}}">
+        </battery-status-card>
+      </div>
     </template>
-    <cpu-card id="cpuCard"
-      is-test-running="{{isTestRunning}}">
-    </cpu-card>
-    <memory-card id="memoryCard"
-      is-test-running="{{isTestRunning}}">
-    </memory-card>
+    <div class="card-width">
+      <cpu-card id="cpuCard"
+        is-test-running="{{isTestRunning}}">
+      </cpu-card>
+    </div>
+    <div class="card-width">
+      <memory-card id="memoryCard"
+        is-test-running="{{isTestRunning}}">
+      </memory-card>
+    </div>
   </div>
   <div class="session-log-container">
     <cr-button class="session-log-button">
diff --git a/chromeos/components/diagnostics_ui/resources/diagnostics_card.html b/chromeos/components/diagnostics_ui/resources/diagnostics_card.html
index d585a3d..95e310f4 100644
--- a/chromeos/components/diagnostics_ui/resources/diagnostics_card.html
+++ b/chromeos/components/diagnostics_ui/resources/diagnostics_card.html
@@ -22,7 +22,6 @@
     display: flex;
     flex-direction: column;
     margin-top: 12px;
-    width: 650px;
   }
 
   .card-header {
diff --git a/chromeos/components/diagnostics_ui/resources/diagnostics_shared_css.html b/chromeos/components/diagnostics_ui/resources/diagnostics_shared_css.html
index ad288b0..5ec1273 100644
--- a/chromeos/components/diagnostics_ui/resources/diagnostics_shared_css.html
+++ b/chromeos/components/diagnostics_ui/resources/diagnostics_shared_css.html
@@ -19,6 +19,46 @@
       padding-inline-start: 20px;
       position: relative;
       top: 12%;
-  }
+    }
+
+    @media (min-width:600px) {
+      :host {
+        --container-padding: 24px;
+        --content-container-width: 552px;
+        --chart-width: 452px;
+        }
+    }
+
+    @media (min-width:768px) {
+      :host {
+        --container-padding: 64px;
+        --content-container-width: 640px;
+        --chart-width: 540px;
+        }
+    }
+
+    @media (min-width:960px) {
+      :host {
+        --container-padding: 160px;
+        --content-container-width: 640px;
+        --chart-width: 540px;
+      }
+    }
+
+    @media (min-width:1280px) {
+      :host {
+        --container-padding: 160px;
+        --content-container-width: 680px;
+        --chart-width: 580px;
+      }
+    }
+
+    @media (min-width:1440px) {
+      :host {
+        --container-padding: 360px;
+        --content-container-width: 720px;
+        --chart-width: 620px;
+      }
+    }
   </style>
 </template>
diff --git a/chromeos/components/diagnostics_ui/resources/realtime_cpu_chart.js b/chromeos/components/diagnostics_ui/resources/realtime_cpu_chart.js
index 249f9e70..99cdb77 100644
--- a/chromeos/components/diagnostics_ui/resources/realtime_cpu_chart.js
+++ b/chromeos/components/diagnostics_ui/resources/realtime_cpu_chart.js
@@ -138,6 +138,8 @@
     }
   },
 
+  observers: ['setScaling_(graphWidth_)'],
+
   /** @override */
   created() {
     // Initialize the data array with data outside the chart boundary.
@@ -150,6 +152,19 @@
   ready() {
     this.setScaling_();
     this.initializeChart_();
+    window.addEventListener('resize', (e) => this.updateChartWidth_());
+
+    // Set the initial chart width.
+    this.updateChartWidth_();
+  },
+
+  /** @private */
+  updateChartWidth_() {
+    // TODO(michaelcheco): Enforce 600px as the minimum window size.
+
+    // parseFloat() is used to convert the string returned by
+    // getComputedStyleValue() into a number ("642px" --> 642).
+    this.width_ = parseFloat(this.getComputedStyleValue('--chart-width'));
   },
 
   /**