Commit ef2b7f02 authored by Jay Harris's avatar Jay Harris Committed by Commit Bot

Badging: Speculative fix for badging ceasing to work.

Some users are reporting that badging stops working after several days
of leaving the app open. We do not have steps to repro, so I'm
speculating that it's caused by the mojo connection failing. To test
this, I'm going to create a new connection each time we set the badge.

If the issue continues to be seen after this CL lands, it can be
reverted.

Bug: 1048880
Change-Id: Idbcca7be2d08ed8011f05351482705af8f0fea92
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2035521Reviewed-by: default avatarAlan Cutter <alancutter@chromium.org>
Commit-Queue: Jay Harris <harrisjay@chromium.org>
Cr-Commit-Position: refs/heads/master@{#738704}
parent 85e93c12
......@@ -27,11 +27,7 @@ NavigatorBadge& NavigatorBadge::From(ScriptState* script_state) {
return *supplement;
}
NavigatorBadge::NavigatorBadge(ExecutionContext* context) {
context->GetBrowserInterfaceBroker().GetInterface(
badge_service_.BindNewPipeAndPassReceiver());
DCHECK(badge_service_);
}
NavigatorBadge::NavigatorBadge(ExecutionContext* context) : context_(context) {}
// static
ScriptPromise NavigatorBadge::setAppBadge(ScriptState* script_state,
......@@ -75,6 +71,8 @@ ScriptPromise NavigatorBadge::clearAppBadge(ScriptState* script_state,
void NavigatorBadge::Trace(blink::Visitor* visitor) {
Supplement<ExecutionContext>::Trace(visitor);
visitor->Trace(context_);
}
// static
......@@ -84,14 +82,23 @@ ScriptPromise NavigatorBadge::SetAppBadgeHelper(
if (badge_value->is_number() && badge_value->get_number() == 0)
return ClearAppBadgeHelper(script_state);
From(script_state).badge_service_->SetBadge(std::move(badge_value));
From(script_state).badge_service()->SetBadge(std::move(badge_value));
return ScriptPromise::CastUndefined(script_state);
}
// static
ScriptPromise NavigatorBadge::ClearAppBadgeHelper(ScriptState* script_state) {
From(script_state).badge_service_->ClearBadge();
From(script_state).badge_service()->ClearBadge();
return ScriptPromise::CastUndefined(script_state);
}
mojo::Remote<mojom::blink::BadgeService> NavigatorBadge::badge_service() {
mojo::Remote<mojom::blink::BadgeService> badge_service;
context_->GetBrowserInterfaceBroker().GetInterface(
badge_service.BindNewPipeAndPassReceiver());
DCHECK(badge_service);
return badge_service;
}
} // namespace blink
......@@ -46,7 +46,9 @@ class NavigatorBadge final : public GarbageCollected<NavigatorBadge>,
mojom::blink::BadgeValuePtr badge_value);
static ScriptPromise ClearAppBadgeHelper(ScriptState* script_state);
mojo::Remote<blink::mojom::blink::BadgeService> badge_service_;
mojo::Remote<mojom::blink::BadgeService> badge_service();
Member<ExecutionContext> context_;
};
} // namespace blink
......
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