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) { ...@@ -27,11 +27,7 @@ NavigatorBadge& NavigatorBadge::From(ScriptState* script_state) {
return *supplement; return *supplement;
} }
NavigatorBadge::NavigatorBadge(ExecutionContext* context) { NavigatorBadge::NavigatorBadge(ExecutionContext* context) : context_(context) {}
context->GetBrowserInterfaceBroker().GetInterface(
badge_service_.BindNewPipeAndPassReceiver());
DCHECK(badge_service_);
}
// static // static
ScriptPromise NavigatorBadge::setAppBadge(ScriptState* script_state, ScriptPromise NavigatorBadge::setAppBadge(ScriptState* script_state,
...@@ -75,6 +71,8 @@ ScriptPromise NavigatorBadge::clearAppBadge(ScriptState* script_state, ...@@ -75,6 +71,8 @@ ScriptPromise NavigatorBadge::clearAppBadge(ScriptState* script_state,
void NavigatorBadge::Trace(blink::Visitor* visitor) { void NavigatorBadge::Trace(blink::Visitor* visitor) {
Supplement<ExecutionContext>::Trace(visitor); Supplement<ExecutionContext>::Trace(visitor);
visitor->Trace(context_);
} }
// static // static
...@@ -84,14 +82,23 @@ ScriptPromise NavigatorBadge::SetAppBadgeHelper( ...@@ -84,14 +82,23 @@ ScriptPromise NavigatorBadge::SetAppBadgeHelper(
if (badge_value->is_number() && badge_value->get_number() == 0) if (badge_value->is_number() && badge_value->get_number() == 0)
return ClearAppBadgeHelper(script_state); 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); return ScriptPromise::CastUndefined(script_state);
} }
// static // static
ScriptPromise NavigatorBadge::ClearAppBadgeHelper(ScriptState* script_state) { ScriptPromise NavigatorBadge::ClearAppBadgeHelper(ScriptState* script_state) {
From(script_state).badge_service_->ClearBadge(); From(script_state).badge_service()->ClearBadge();
return ScriptPromise::CastUndefined(script_state); 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 } // namespace blink
...@@ -46,7 +46,9 @@ class NavigatorBadge final : public GarbageCollected<NavigatorBadge>, ...@@ -46,7 +46,9 @@ class NavigatorBadge final : public GarbageCollected<NavigatorBadge>,
mojom::blink::BadgeValuePtr badge_value); mojom::blink::BadgeValuePtr badge_value);
static ScriptPromise ClearAppBadgeHelper(ScriptState* script_state); 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 } // 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