diff --git a/DEPS b/DEPS
index a44ff0f..8939241 100644
--- a/DEPS
+++ b/DEPS
@@ -44,7 +44,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '867305555ef9a0f61b643ba23e08631f1d90892c',
+  'v8_revision': '248b789e106abdf7b0a92d11a43f038307403358',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java
index 721fd36..4084407 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java
@@ -94,6 +94,11 @@
     }
 
     @CalledByNative
+    private static String getCurrencySystemFromPaymentItem(PaymentItem item) {
+        return item.amount.currencySystem;
+    }
+
+    @CalledByNative
     private static void onPaymentAppCreated(long registrationId, String label,
             @Nullable String sublabel, @Nullable Bitmap icon, String[] methodNameArray,
             WebContents webContents, Object callback) {
diff --git a/chrome/browser/android/payments/service_worker_payment_app_bridge.cc b/chrome/browser/android/payments/service_worker_payment_app_bridge.cc
index 3512bc3..6ad6b22 100644
--- a/chrome/browser/android/payments/service_worker_payment_app_bridge.cc
+++ b/chrome/browser/android/payments/service_worker_payment_app_bridge.cc
@@ -129,36 +129,39 @@
     event_data->method_data.push_back(std::move(methodData));
   }
 
-  event_data->total = PaymentItem::New();
-  event_data->total->label = ConvertJavaStringToUTF8(
-      env,
-      Java_ServiceWorkerPaymentAppBridge_getLabelFromPaymentItem(env, jtotal));
-  event_data->total->amount = PaymentCurrencyAmount::New();
-  event_data->total->amount->currency = ConvertJavaStringToUTF8(
+  event_data->total = PaymentCurrencyAmount::New();
+  event_data->total->currency = ConvertJavaStringToUTF8(
       env, Java_ServiceWorkerPaymentAppBridge_getCurrencyFromPaymentItem(
                env, jtotal));
-  event_data->total->amount->value = ConvertJavaStringToUTF8(
+  event_data->total->value = ConvertJavaStringToUTF8(
       env,
       Java_ServiceWorkerPaymentAppBridge_getValueFromPaymentItem(env, jtotal));
+  event_data->total->currency_system = ConvertJavaStringToUTF8(
+      env, Java_ServiceWorkerPaymentAppBridge_getCurrencySystemFromPaymentItem(
+               env, jtotal));
 
   for (jsize i = 0; i < env->GetArrayLength(jmodifiers); i++) {
     ScopedJavaLocalRef<jobject> jmodifier(
         env, env->GetObjectArrayElement(jmodifiers, i));
     PaymentDetailsModifierPtr modifier = PaymentDetailsModifier::New();
 
-    ScopedJavaLocalRef<jobject> jtotal =
+    ScopedJavaLocalRef<jobject> jmodifier_total =
         Java_ServiceWorkerPaymentAppBridge_getTotalFromModifier(env, jmodifier);
     modifier->total = PaymentItem::New();
     modifier->total->label = ConvertJavaStringToUTF8(
         env, Java_ServiceWorkerPaymentAppBridge_getLabelFromPaymentItem(
-                 env, jtotal));
+                 env, jmodifier_total));
     modifier->total->amount = PaymentCurrencyAmount::New();
     modifier->total->amount->currency = ConvertJavaStringToUTF8(
         env, Java_ServiceWorkerPaymentAppBridge_getCurrencyFromPaymentItem(
-                 env, jtotal));
+                 env, jmodifier_total));
     modifier->total->amount->value = ConvertJavaStringToUTF8(
         env, Java_ServiceWorkerPaymentAppBridge_getValueFromPaymentItem(
-                 env, jtotal));
+                 env, jmodifier_total));
+    modifier->total->amount->currency_system = ConvertJavaStringToUTF8(
+        env,
+        Java_ServiceWorkerPaymentAppBridge_getCurrencySystemFromPaymentItem(
+            env, jmodifier_total));
 
     ScopedJavaLocalRef<jobject> jmodifier_method_data =
         Java_ServiceWorkerPaymentAppBridge_getMethodDataFromModifier(env,
diff --git a/chrome/browser/chromeos/arc/arc_service_launcher.cc b/chrome/browser/chromeos/arc/arc_service_launcher.cc
index 2b03d8c..1b2b64c 100644
--- a/chrome/browser/chromeos/arc/arc_service_launcher.cc
+++ b/chrome/browser/chromeos/arc/arc_service_launcher.cc
@@ -95,8 +95,6 @@
 
   // List in lexicographical order.
   arc_service_manager_->AddService(
-      base::MakeUnique<ArcCrashCollectorBridge>(arc_bridge_service));
-  arc_service_manager_->AddService(
       base::MakeUnique<ArcDownloadsWatcherService>(arc_bridge_service));
   arc_service_manager_->AddService(
       base::MakeUnique<ArcEnterpriseReportingService>(arc_bridge_service));
@@ -198,6 +196,7 @@
   ArcBluetoothBridge::GetForBrowserContext(profile);
   ArcBootErrorNotification::GetForBrowserContext(profile);
   ArcClipboardBridge::GetForBrowserContext(profile);
+  ArcCrashCollectorBridge::GetForBrowserContext(profile);
 
   arc_service_manager_->AddService(base::MakeUnique<ArcBootPhaseMonitorBridge>(
       arc_service_manager_->arc_bridge_service(),
diff --git a/components/arc/crash_collector/arc_crash_collector_bridge.cc b/components/arc/crash_collector/arc_crash_collector_bridge.cc
index 874f408..109832b 100644
--- a/components/arc/crash_collector/arc_crash_collector_bridge.cc
+++ b/components/arc/crash_collector/arc_crash_collector_bridge.cc
@@ -10,10 +10,12 @@
 #include <utility>
 
 #include "base/logging.h"
+#include "base/memory/singleton.h"
 #include "base/process/launch.h"
 #include "base/task_scheduler/post_task.h"
 #include "base/task_scheduler/task_traits.h"
 #include "components/arc/arc_bridge_service.h"
+#include "components/arc/arc_browser_context_keyed_service_factory_base.h"
 #include "mojo/edk/embedder/embedder.h"
 
 namespace {
@@ -49,21 +51,56 @@
 }  // namespace
 
 namespace arc {
+namespace {
 
-ArcCrashCollectorBridge::ArcCrashCollectorBridge(ArcBridgeService* bridge)
-    : ArcService(bridge), binding_(this) {
-  arc_bridge_service()->crash_collector()->AddObserver(this);
+// Singleton factory for ArcCrashCollectorBridge.
+class ArcCrashCollectorBridgeFactory
+    : public internal::ArcBrowserContextKeyedServiceFactoryBase<
+          ArcCrashCollectorBridge,
+          ArcCrashCollectorBridgeFactory> {
+ public:
+  // Factory name used by ArcBrowserContextKeyedServiceFactoryBase.
+  static constexpr const char* kName = "ArcCrashCollectorBridgeFactory";
+
+  static ArcCrashCollectorBridgeFactory* GetInstance() {
+    return base::Singleton<ArcCrashCollectorBridgeFactory>::get();
+  }
+
+ private:
+  friend base::DefaultSingletonTraits<ArcCrashCollectorBridgeFactory>;
+  ArcCrashCollectorBridgeFactory() = default;
+  ~ArcCrashCollectorBridgeFactory() override = default;
+};
+
+}  // namespace
+
+// static
+ArcCrashCollectorBridge* ArcCrashCollectorBridge::GetForBrowserContext(
+    content::BrowserContext* context) {
+  return ArcCrashCollectorBridgeFactory::GetForBrowserContext(context);
+}
+
+ArcCrashCollectorBridge::ArcCrashCollectorBridge(
+    content::BrowserContext* context,
+    ArcBridgeService* bridge_service)
+    : arc_bridge_service_(bridge_service), binding_(this) {
+  arc_bridge_service_->crash_collector()->AddObserver(this);
 }
 
 ArcCrashCollectorBridge::~ArcCrashCollectorBridge() {
-  arc_bridge_service()->crash_collector()->RemoveObserver(this);
+  // TODO(hidehiko): Currently, the lifetime of ArcBridgeService and
+  // BrowserContextKeyedService is not nested.
+  // If ArcServiceManager::Get() returns nullptr, it is already destructed,
+  // so do not touch it.
+  if (ArcServiceManager::Get())
+    arc_bridge_service_->crash_collector()->RemoveObserver(this);
 }
 
 void ArcCrashCollectorBridge::OnInstanceReady() {
   mojom::CrashCollectorHostPtr host_ptr;
   binding_.Bind(mojo::MakeRequest(&host_ptr));
-  auto* instance = ARC_GET_INSTANCE_FOR_METHOD(
-      arc_bridge_service()->crash_collector(), Init);
+  auto* instance =
+      ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->crash_collector(), Init);
   DCHECK(instance);
   instance->Init(std::move(host_ptr));
 }
diff --git a/components/arc/crash_collector/arc_crash_collector_bridge.h b/components/arc/crash_collector/arc_crash_collector_bridge.h
index 220c8e17..17cf7850 100644
--- a/components/arc/crash_collector/arc_crash_collector_bridge.h
+++ b/components/arc/crash_collector/arc_crash_collector_bridge.h
@@ -8,22 +8,33 @@
 #include <string>
 
 #include "base/macros.h"
-#include "components/arc/arc_service.h"
 #include "components/arc/common/crash_collector.mojom.h"
 #include "components/arc/instance_holder.h"
+#include "components/keyed_service/core/keyed_service.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
+namespace content {
+class BrowserContext;
+}  // namespace content
+
 namespace arc {
 
 class ArcBridgeService;
 
 // Relays dumps for non-native ARC crashes to the crash reporter in Chrome OS.
 class ArcCrashCollectorBridge
-    : public ArcService,
+    : public KeyedService,
       public InstanceHolder<mojom::CrashCollectorInstance>::Observer,
       public mojom::CrashCollectorHost {
  public:
-  explicit ArcCrashCollectorBridge(ArcBridgeService* bridge);
+  // Returns singleton instance for the given BrowserContext,
+  // or nullptr if the browser |context| is not allowed to use ARC.
+  static ArcCrashCollectorBridge* GetForBrowserContext(
+      content::BrowserContext* context);
+
+  ArcCrashCollectorBridge(content::BrowserContext* context,
+                          ArcBridgeService* bridge);
+
   ~ArcCrashCollectorBridge() override;
 
   // InstanceHolder<mojom::CrashCollectorInstance>::Observer overrides.
@@ -37,6 +48,8 @@
                           const std::string& cpu_abi) override;
 
  private:
+  ArcBridgeService* const arc_bridge_service_;  // Owned by ArcServiceManager.
+
   mojo::Binding<mojom::CrashCollectorHost> binding_;
 
   std::string device_;
diff --git a/content/browser/payments/payment_app_browsertest.cc b/content/browser/payments/payment_app_browsertest.cc
index dfc1cf52..b4a9a94 100644
--- a/content/browser/payments/payment_app_browsertest.cc
+++ b/content/browser/payments/payment_app_browsertest.cc
@@ -116,14 +116,15 @@
     event_data->method_data.push_back(PaymentMethodData::New());
     event_data->method_data[0]->supported_methods = {supported_method};
 
-    event_data->total = PaymentItem::New();
-    event_data->total->amount = PaymentCurrencyAmount::New();
-    event_data->total->amount->currency = "USD";
+    event_data->total = PaymentCurrencyAmount::New();
+    event_data->total->currency = "USD";
+    event_data->total->value = "55";
 
     PaymentDetailsModifierPtr modifier = PaymentDetailsModifier::New();
     modifier->total = PaymentItem::New();
     modifier->total->amount = PaymentCurrencyAmount::New();
     modifier->total->amount->currency = "USD";
+    modifier->total->amount->value = "55";
     modifier->method_data = PaymentMethodData::New();
     modifier->method_data->supported_methods = {supported_method};
     event_data->modifiers.push_back(std::move(modifier));
@@ -186,13 +187,14 @@
   EXPECT_EQ("[{\"supportedMethods\":[\"basic-card\"]}]",
             PopConsoleString() /* methodData */);
   EXPECT_EQ(
-      "{\"amount\":{\"currency\":\"USD\",\"currencySystem\":\"urn:iso:std:iso:"
-      "4217\",\"value\":\"\"},\"label\":\"\",\"pending\":false}",
+      "{\"currency\":\"USD\",\"currencySystem\":\"urn:iso:std:iso:4217\","
+      "\"value\":\"55\"}",
       PopConsoleString() /* total */);
   EXPECT_EQ(
       "[{\"additionalDisplayItems\":[],\"supportedMethods\":[\"basic-card\"],"
       "\"total\":{\"amount\":{\"currency\":\"USD\",\"currencySystem\":\"urn:"
-      "iso:std:iso:4217\",\"value\":\"\"},\"label\":\"\",\"pending\":false}}]",
+      "iso:std:iso:4217\",\"value\":\"55\"},\"label\":\"\",\"pending\":false}}"
+      "]",
       PopConsoleString() /* modifiers */);
   EXPECT_EQ("basic-card-payment-app-id",
             PopConsoleString() /* instrumentKey */);
@@ -222,14 +224,15 @@
   EXPECT_EQ("[{\"supportedMethods\":[\"https://bobpay.com\"]}]",
             PopConsoleString() /* methodData */);
   EXPECT_EQ(
-      "{\"amount\":{\"currency\":\"USD\",\"currencySystem\":\"urn:iso:std:iso:"
-      "4217\",\"value\":\"\"},\"label\":\"\",\"pending\":false}",
+      "{\"currency\":\"USD\",\"currencySystem\":\"urn:iso:std:iso:4217\","
+      "\"value\":\"55\"}",
       PopConsoleString() /* total */);
   EXPECT_EQ(
       "[{\"additionalDisplayItems\":[],\"supportedMethods\":[\"https://"
       "bobpay.com\"],"
       "\"total\":{\"amount\":{\"currency\":\"USD\",\"currencySystem\":\"urn:"
-      "iso:std:iso:4217\",\"value\":\"\"},\"label\":\"\",\"pending\":false}}]",
+      "iso:std:iso:4217\",\"value\":\"55\"},\"label\":\"\",\"pending\":false}}"
+      "]",
       PopConsoleString() /* modifiers */);
   EXPECT_EQ("bobpay-payment-app-id", PopConsoleString() /* instrumentKey */);
 }
diff --git a/content/browser/payments/payment_app_provider_impl_unittest.cc b/content/browser/payments/payment_app_provider_impl_unittest.cc
index e415935..604297d 100644
--- a/content/browser/payments/payment_app_provider_impl_unittest.cc
+++ b/content/browser/payments/payment_app_provider_impl_unittest.cc
@@ -101,8 +101,7 @@
   payments::mojom::PaymentRequestEventDataPtr event_data =
       payments::mojom::PaymentRequestEventData::New();
   event_data->method_data.push_back(payments::mojom::PaymentMethodData::New());
-  event_data->total = payments::mojom::PaymentItem::New();
-  event_data->total->amount = payments::mojom::PaymentCurrencyAmount::New();
+  event_data->total = payments::mojom::PaymentCurrencyAmount::New();
 
   bool called = false;
   InvokePaymentApp(apps[GURL("https://hellopay.com/")]->registration_id,
diff --git a/content/renderer/service_worker/service_worker_type_converters.cc b/content/renderer/service_worker/service_worker_type_converters.cc
index 50bbfbe7..0fdcd7d 100644
--- a/content/renderer/service_worker/service_worker_type_converters.cc
+++ b/content/renderer/service_worker/service_worker_type_converters.cc
@@ -49,7 +49,7 @@
         std::move(input->method_data[i]));
   }
 
-  output.total = mojo::ConvertTo<blink::WebPaymentItem>(input->total);
+  output.total = mojo::ConvertTo<blink::WebPaymentCurrencyAmount>(input->total);
 
   output.modifiers = blink::WebVector<blink::WebPaymentDetailsModifier>(
       input->modifiers.size());
diff --git a/third_party/WebKit/LayoutTests/http/tests/payments/resources/payment-request-event.js b/third_party/WebKit/LayoutTests/http/tests/payments/resources/payment-request-event.js
index 986c07e..f0b39072 100644
--- a/third_party/WebKit/LayoutTests/http/tests/payments/resources/payment-request-event.js
+++ b/third_party/WebKit/LayoutTests/http/tests/payments/resources/payment-request-event.js
@@ -23,11 +23,8 @@
         supportedMethods: ['basic-card']
       }],
       total: {
-        label: 'Total',
-        amount: {
-          currency: 'USD',
-          value: '55.00'
-        }
+        currency: 'USD',
+        value: '55.00'
       },
       modifiers: [{
         supportedMethods: ['basic-card']
@@ -42,9 +39,8 @@
       assert_equals(e.methodData.length, 1);
       assert_equals(e.methodData[0].supportedMethods.length, 1);
       assert_equals(e.methodData[0].supportedMethods[0], 'basic-card');
-      assert_equals(e.total.label, 'Total');
-      assert_equals(e.total.amount.currency, 'USD');
-      assert_equals(e.total.amount.value, '55.00');
+      assert_equals(e.total.currency, 'USD');
+      assert_equals(e.total.value, '55.00');
       assert_equals(e.modifiers.length, 1);
       assert_equals(e.modifiers[0].supportedMethods.length, 1);
       assert_equals(e.modifiers[0].supportedMethods[0], 'basic-card');
diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
index 7bf12629..592b8f8c 100644
--- a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
+++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
@@ -92,6 +92,12 @@
   return resource->GetContent();
 }
 
+ImageResourceContent::~ImageResourceContent() {
+  // For investigation of crbug.com/737392.
+  // TODO(hiroshige): Remove this before going to beta.
+  CHECK(!is_update_image_being_called_);
+}
+
 void ImageResourceContent::SetImageResourceInfo(ImageResourceInfo* info) {
   info_ = info;
 }
@@ -322,13 +328,18 @@
 void ImageResourceContent::ClearImage() {
   if (!image_)
     return;
+  CHECK_NE(GetContentStatus(), ResourceStatus::kNotStarted);
   int64_t length = image_->Data() ? image_->Data()->size() : 0;
+  CHECK_NE(GetContentStatus(), ResourceStatus::kNotStarted);
   v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(-length);
+  CHECK_NE(GetContentStatus(), ResourceStatus::kNotStarted);
 
   // If our Image has an observer, it's always us so we need to clear the back
   // pointer before dropping our reference.
   image_->ClearImageObserver();
+  CHECK_NE(GetContentStatus(), ResourceStatus::kNotStarted);
   image_.Clear();
+  CHECK_NE(GetContentStatus(), ResourceStatus::kNotStarted);
   size_available_ = Image::kSizeUnavailable;
 }
 
@@ -338,6 +349,8 @@
   // When |ShouldNotifyFinish|, we set content_status_
   // to a loaded ResourceStatus.
 
+  CHECK_NE(GetContentStatus(), ResourceStatus::kNotStarted);
+
   // Checks |new_status| (i.e. Resource's current status).
   switch (new_status) {
     case ResourceStatus::kCached:
@@ -421,10 +434,8 @@
     bool is_multipart) {
   TRACE_EVENT0("blink", "ImageResourceContent::updateImage");
 
-#if DCHECK_IS_ON()
-  DCHECK(!is_update_image_being_called_);
+  CHECK(!is_update_image_being_called_);
   AutoReset<bool> scope(&is_update_image_being_called_, true);
-#endif
 
   CHECK_NE(GetContentStatus(), ResourceStatus::kNotStarted);
 
@@ -453,7 +464,9 @@
         if (!image_)
           image_ = CreateImage(is_multipart);
         DCHECK(image_);
+        CHECK_NE(GetContentStatus(), ResourceStatus::kNotStarted);
         size_available_ = image_->SetData(std::move(data), all_data_received);
+        CHECK_NE(GetContentStatus(), ResourceStatus::kNotStarted);
         DCHECK(all_data_received ||
                size_available_ !=
                    Image::kSizeAvailableAndLoadingAsynchronously);
diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.h b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.h
index a9a1195..ceac72d 100644
--- a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.h
+++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.h
@@ -57,6 +57,8 @@
 
   static ImageResourceContent* Fetch(FetchParameters&, ResourceFetcher*);
 
+  ~ImageResourceContent() override;
+
   // Returns the nullImage() if the image is not available yet.
   blink::Image* GetImage();
   bool HasImage() const { return image_.Get(); }
@@ -226,9 +228,7 @@
   HashCountedSet<ImageResourceObserver*> observers_;
   HashCountedSet<ImageResourceObserver*> finished_observers_;
 
-#if DCHECK_IS_ON()
   bool is_update_image_being_called_ = false;
-#endif
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/payments/PaymentEventDataConversion.cpp b/third_party/WebKit/Source/modules/payments/PaymentEventDataConversion.cpp
index fed8f8f..2d6d6ba 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentEventDataConversion.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentEventDataConversion.cpp
@@ -102,7 +102,7 @@
     method_data.push_back(ToPaymentMethodData(script_state, md));
   }
   event_data.setMethodData(method_data);
-  event_data.setTotal(ToPaymentItem(web_event_data.total));
+  event_data.setTotal(ToPaymentCurrencyAmount(web_event_data.total));
   HeapVector<PaymentDetailsModifier> modifiers;
   for (const auto& modifier : web_event_data.modifiers) {
     modifiers.push_back(ToPaymentDetailsModifier(script_state, modifier));
diff --git a/third_party/WebKit/Source/modules/payments/PaymentEventDataConversionTest.cpp b/third_party/WebKit/Source/modules/payments/PaymentEventDataConversionTest.cpp
index 596f245b..5924916 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentEventDataConversionTest.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentEventDataConversionTest.cpp
@@ -15,12 +15,11 @@
 namespace blink {
 namespace {
 
-static WebPaymentItem CreateWebPaymentItemForTest() {
-  WebPaymentItem web_item;
-  web_item.label = WebString::FromUTF8("Label");
-  web_item.amount.currency = WebString::FromUTF8("USD");
-  web_item.amount.value = WebString::FromUTF8("9.99");
-  return web_item;
+static WebPaymentCurrencyAmount CreateWebPaymentCurrencyAmountForTest() {
+  WebPaymentCurrencyAmount web_currency_amount;
+  web_currency_amount.currency = WebString::FromUTF8("USD");
+  web_currency_amount.value = WebString::FromUTF8("9.99");
+  return web_currency_amount;
 }
 
 static WebPaymentMethodData CreateWebPaymentMethodDataForTest() {
@@ -49,7 +48,7 @@
   Vector<WebPaymentMethodData> method_data;
   method_data.push_back(CreateWebPaymentMethodDataForTest());
   web_data.method_data = WebVector<WebPaymentMethodData>(method_data);
-  web_data.total = CreateWebPaymentItemForTest();
+  web_data.total = CreateWebPaymentCurrencyAmountForTest();
   web_data.instrument_key = WebString::FromUTF8("payment-instrument-key");
   return web_data;
 }
@@ -117,13 +116,10 @@
   EXPECT_EQ("{\"merchantId\":\"12345\"}", stringified_data);
 
   ASSERT_TRUE(data.hasTotal());
-  ASSERT_TRUE(data.total().hasLabel());
-  EXPECT_EQ("Label", data.total().label());
-  ASSERT_TRUE(data.total().hasAmount());
-  ASSERT_TRUE(data.total().amount().hasCurrency());
-  EXPECT_EQ("USD", data.total().amount().currency());
-  ASSERT_TRUE(data.total().amount().hasValue());
-  EXPECT_EQ("9.99", data.total().amount().value());
+  ASSERT_TRUE(data.total().hasCurrency());
+  EXPECT_EQ("USD", data.total().currency());
+  ASSERT_TRUE(data.total().hasValue());
+  EXPECT_EQ("9.99", data.total().value());
 
   ASSERT_TRUE(data.hasInstrumentKey());
   EXPECT_EQ("payment-instrument-key", data.instrumentKey());
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequestEvent.h b/third_party/WebKit/Source/modules/payments/PaymentRequestEvent.h
index 9887c10..458084c7 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentRequestEvent.h
+++ b/third_party/WebKit/Source/modules/payments/PaymentRequestEvent.h
@@ -58,7 +58,7 @@
   String payment_request_origin_;
   String payment_request_id_;
   HeapVector<PaymentMethodData> method_data_;
-  PaymentItem total_;
+  PaymentCurrencyAmount total_;
   HeapVector<PaymentDetailsModifier> modifiers_;
   String instrument_key_;
 
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequestEventInit.idl b/third_party/WebKit/Source/modules/payments/PaymentRequestEventInit.idl
index 66f3287b..9404171 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentRequestEventInit.idl
+++ b/third_party/WebKit/Source/modules/payments/PaymentRequestEventInit.idl
@@ -9,7 +9,7 @@
     USVString paymentRequestOrigin;
     DOMString paymentRequestId;
     sequence<PaymentMethodData> methodData;
-    PaymentItem total;
+    PaymentCurrencyAmount total;
     sequence<PaymentDetailsModifier> modifiers;
     DOMString instrumentKey;
 };
diff --git a/third_party/WebKit/public/platform/modules/payments/WebPaymentRequestEventData.h b/third_party/WebKit/public/platform/modules/payments/WebPaymentRequestEventData.h
index 30a0d7c..2715926 100644
--- a/third_party/WebKit/public/platform/modules/payments/WebPaymentRequestEventData.h
+++ b/third_party/WebKit/public/platform/modules/payments/WebPaymentRequestEventData.h
@@ -7,13 +7,14 @@
 
 #include "public/platform/WebString.h"
 #include "public/platform/modules/payments/WebCanMakePaymentEventData.h"
+#include "public/platform/modules/payments/WebPaymentCurrencyAmount.h"
 
 namespace blink {
 
 struct WebPaymentRequestEventData : public WebCanMakePaymentEventData {
   WebString payment_request_id;
   WebString instrument_key;
-  WebPaymentItem total;
+  WebPaymentCurrencyAmount total;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/public/platform/modules/payments/payment_app.mojom b/third_party/WebKit/public/platform/modules/payments/payment_app.mojom
index c442daa..9685679 100644
--- a/third_party/WebKit/public/platform/modules/payments/payment_app.mojom
+++ b/third_party/WebKit/public/platform/modules/payments/payment_app.mojom
@@ -58,7 +58,7 @@
   url.mojom.Url payment_request_origin;
   string payment_request_id;
   array<PaymentMethodData> method_data;
-  PaymentItem total;
+  PaymentCurrencyAmount total;
   array<PaymentDetailsModifier> modifiers;
   string instrument_key;
 };
diff --git a/ui/views/BUILD.gn b/ui/views/BUILD.gn
index be51a99..a226332 100644
--- a/ui/views/BUILD.gn
+++ b/ui/views/BUILD.gn
@@ -173,6 +173,7 @@
     "layout/grid_layout.h",
     "layout/layout_manager.h",
     "layout/layout_provider.h",
+    "linux_ui/device_scale_factor_observer.h",
     "linux_ui/linux_ui.h",
     "linux_ui/status_icon_linux.h",
     "linux_ui/window_button_order_observer.h",