Commit 3f25ba2f authored by Glen Robertson's avatar Glen Robertson Committed by Commit Bot

digitalgoods:Log error messages to JS console so devs can debug.

Console errors are also logged to stderr so C++ devs can debug as
before.

Bug: 1149223
Change-Id: I050ba47184740bb7a08abf1469838f79f616105c
Fixed: 1149223
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2537277
Commit-Queue: Glen Robertson <glenrob@chromium.org>
Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Reviewed-by: default avatarEric Willigers <ericwilligers@chromium.org>
Cr-Commit-Position: refs/heads/master@{#827697}
parent f38be8fe
......@@ -12,6 +12,8 @@ blink_modules_sources("goods") {
"digital_goods_type_converters.h",
"dom_window_digital_goods.cc",
"dom_window_digital_goods.h",
"util.cc",
"util.h",
]
deps = [ "//third_party/blink/renderer/modules/payments" ]
}
......@@ -10,9 +10,25 @@
namespace mojo {
using payments::mojom::blink::BillingResponseCode;
using payments::mojom::blink::CreateDigitalGoodsResponseCode;
using payments::mojom::blink::ItemDetailsPtr;
using payments::mojom::blink::PurchaseDetailsPtr;
WTF::String TypeConverter<WTF::String, CreateDigitalGoodsResponseCode>::Convert(
const CreateDigitalGoodsResponseCode& input) {
switch (input) {
case CreateDigitalGoodsResponseCode::kOk:
return "ok";
case CreateDigitalGoodsResponseCode::kError:
return "error";
case CreateDigitalGoodsResponseCode::kUnsupportedPaymentMethod:
return "unsupportedPaymentMethod";
case CreateDigitalGoodsResponseCode::kUnsupportedContext:
return "unsupportedContext";
}
NOTREACHED();
}
blink::ItemDetails* TypeConverter<blink::ItemDetails*, ItemDetailsPtr>::Convert(
const ItemDetailsPtr& input) {
if (!input)
......
......@@ -15,6 +15,14 @@
namespace mojo {
template <>
struct MODULES_EXPORT
TypeConverter<WTF::String,
payments::mojom::blink::CreateDigitalGoodsResponseCode> {
static WTF::String Convert(
const payments::mojom::blink::CreateDigitalGoodsResponseCode& input);
};
// Converts a mojo ItemDetails into a WebIDL ItemDetails.
// Returns a null IDL struct when a null mojo struct is given as input.
template <>
......
......@@ -8,13 +8,18 @@
#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/modules/payments/goods/digital_goods_service.h"
#include "third_party/blink/renderer/modules/payments/goods/digital_goods_type_converters.h"
#include "third_party/blink/renderer/modules/payments/goods/util.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
namespace {
using blink::digital_goods_util::LogConsoleError;
using payments::mojom::blink::CreateDigitalGoodsResponseCode;
void OnCreateDigitalGoodsResponse(
......@@ -23,7 +28,8 @@ void OnCreateDigitalGoodsResponse(
mojo::PendingRemote<payments::mojom::blink::DigitalGoods> pending_remote) {
if (code != CreateDigitalGoodsResponseCode::kOk) {
DCHECK(!pending_remote);
VLOG(1) << "CreateDigitalGoodsResponseCode " << code;
LogConsoleError(resolver->GetScriptState(),
"GetDigitalGoodsService: " + mojo::ConvertTo<String>(code));
resolver->Resolve(v8::Null(resolver->GetScriptState()->GetIsolate()));
return;
}
......@@ -53,13 +59,14 @@ ScriptPromise DOMWindowDigitalGoods::GetDigitalGoodsService(
auto promise = resolver->Promise();
if (payment_method.IsEmpty()) {
VLOG(1) << "GetDigitalGoodsService error: Empty payment method.";
LogConsoleError(script_state,
"GetDigitalGoodsService: Empty payment method.");
resolver->Resolve(v8::Null(script_state->GetIsolate()));
return promise;
}
if (!script_state->ContextIsValid()) {
VLOG(1) << "GetDigitalGoodsService error: Context invalid.";
LogConsoleError(script_state, "GetDigitalGoodsService: internal error.");
resolver->Resolve(v8::Null(script_state->GetIsolate()));
return promise;
}
......@@ -68,14 +75,15 @@ ScriptPromise DOMWindowDigitalGoods::GetDigitalGoodsService(
DCHECK(execution_context);
if (execution_context->IsContextDestroyed()) {
VLOG(1) << "GetDigitalGoodsService error: Context destroyed.";
LogConsoleError(script_state, "GetDigitalGoodsService: internal error.");
resolver->Resolve(v8::Null(script_state->GetIsolate()));
return promise;
}
if (!execution_context->IsFeatureEnabled(
mojom::blink::FeaturePolicyFeature::kPayment)) {
VLOG(1) << "GetDigitalGoodsService error: Payments not enabled.";
LogConsoleError(script_state,
"GetDigitalGoodsService: Payments not enabled.");
resolver->Resolve(v8::Null(script_state->GetIsolate()));
return promise;
}
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/modules/payments/goods/util.h"
#include "third_party/blink/public/mojom/devtools/console_message.mojom-blink.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
namespace digital_goods_util {
void LogConsoleError(ScriptState* script_state, const String& message) {
if (!script_state || !script_state->ContextIsValid()) {
VLOG(1) << message;
return;
}
auto* execution_context = ExecutionContext::From(script_state);
DCHECK(execution_context);
execution_context->AddConsoleMessage(
mojom::blink::ConsoleMessageSource::kJavaScript,
mojom::blink::ConsoleMessageLevel::kError, message,
/*discard_duplicates=*/true);
}
} // namespace digital_goods_util
} // namespace blink
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PAYMENTS_GOODS_UTIL_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_PAYMENTS_GOODS_UTIL_H_
namespace WTF {
class String;
}
namespace blink {
class ScriptState;
namespace digital_goods_util {
void LogConsoleError(ScriptState*, const WTF::String& message);
} // namespace digital_goods_util
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_PAYMENTS_GOODS_UTIL_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment