Commit d1f8acc8 authored by Patrick Monette's avatar Patrick Monette Committed by Commit Bot

Fix EnumerateDedicatedWorkers to include final response url

EnumerateDedicatedWorkers is meant to allow an observer to
"catch up" to the notifications it missed by registering late.
This must include the OnFinalResponseURLDetermined() call.

Bug: 993029
Change-Id: I89f38db0b7a6fbf1c3bd42985d7a721dccd0fc5f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2204439
Commit-Queue: Patrick Monette <pmonette@chromium.org>
Reviewed-by: default avatarHiroki Nakagawa <nhiroki@chromium.org>
Cr-Commit-Position: refs/heads/master@{#771196}
parent 3077de53
...@@ -8,6 +8,21 @@ ...@@ -8,6 +8,21 @@
namespace content { namespace content {
DedicatedWorkerServiceImpl::DedicatedWorkerInfo::DedicatedWorkerInfo(
int worker_process_id,
GlobalFrameRoutingId ancestor_render_frame_host_id)
: worker_process_id(worker_process_id),
ancestor_render_frame_host_id(ancestor_render_frame_host_id) {}
DedicatedWorkerServiceImpl::DedicatedWorkerInfo::DedicatedWorkerInfo(
const DedicatedWorkerInfo& info) = default;
DedicatedWorkerServiceImpl::DedicatedWorkerInfo&
DedicatedWorkerServiceImpl::DedicatedWorkerInfo::operator=(
const DedicatedWorkerInfo& info) = default;
DedicatedWorkerServiceImpl::DedicatedWorkerInfo::~DedicatedWorkerInfo() =
default;
DedicatedWorkerServiceImpl::DedicatedWorkerServiceImpl() = default; DedicatedWorkerServiceImpl::DedicatedWorkerServiceImpl() = default;
DedicatedWorkerServiceImpl::~DedicatedWorkerServiceImpl() = default; DedicatedWorkerServiceImpl::~DedicatedWorkerServiceImpl() = default;
...@@ -28,6 +43,10 @@ void DedicatedWorkerServiceImpl::EnumerateDedicatedWorkers(Observer* observer) { ...@@ -28,6 +43,10 @@ void DedicatedWorkerServiceImpl::EnumerateDedicatedWorkers(Observer* observer) {
observer->OnWorkerCreated( observer->OnWorkerCreated(
dedicated_worker_id, dedicated_worker_info.worker_process_id, dedicated_worker_id, dedicated_worker_info.worker_process_id,
dedicated_worker_info.ancestor_render_frame_host_id); dedicated_worker_info.ancestor_render_frame_host_id);
if (dedicated_worker_info.final_response_url) {
observer->OnFinalResponseURLDetermined(
dedicated_worker_id, *dedicated_worker_info.final_response_url);
}
} }
} }
...@@ -42,8 +61,8 @@ void DedicatedWorkerServiceImpl::NotifyWorkerCreated( ...@@ -42,8 +61,8 @@ void DedicatedWorkerServiceImpl::NotifyWorkerCreated(
bool inserted = bool inserted =
dedicated_worker_infos_ dedicated_worker_infos_
.emplace(dedicated_worker_id, .emplace(dedicated_worker_id,
DedicatedWorkerInfo{worker_process_id, DedicatedWorkerInfo(worker_process_id,
ancestor_render_frame_host_id}) ancestor_render_frame_host_id))
.second; .second;
DCHECK(inserted); DCHECK(inserted);
...@@ -68,7 +87,10 @@ void DedicatedWorkerServiceImpl::NotifyBeforeWorkerDestroyed( ...@@ -68,7 +87,10 @@ void DedicatedWorkerServiceImpl::NotifyBeforeWorkerDestroyed(
void DedicatedWorkerServiceImpl::NotifyWorkerFinalResponseURLDetermined( void DedicatedWorkerServiceImpl::NotifyWorkerFinalResponseURLDetermined(
DedicatedWorkerId dedicated_worker_id, DedicatedWorkerId dedicated_worker_id,
const GURL& url) { const GURL& url) {
DCHECK(base::Contains(dedicated_worker_infos_, dedicated_worker_id)); auto it = dedicated_worker_infos_.find(dedicated_worker_id);
DCHECK(it != dedicated_worker_infos_.end());
it->second.final_response_url = url;
for (Observer& observer : observers_) for (Observer& observer : observers_)
observer.OnFinalResponseURLDetermined(dedicated_worker_id, url); observer.OnFinalResponseURLDetermined(dedicated_worker_id, url);
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/observer_list.h" #include "base/observer_list.h"
#include "content/public/browser/dedicated_worker_service.h" #include "content/public/browser/dedicated_worker_service.h"
#include "url/gurl.h"
namespace content { namespace content {
...@@ -47,8 +48,16 @@ class CONTENT_EXPORT DedicatedWorkerServiceImpl ...@@ -47,8 +48,16 @@ class CONTENT_EXPORT DedicatedWorkerServiceImpl
base::ObserverList<Observer> observers_; base::ObserverList<Observer> observers_;
struct DedicatedWorkerInfo { struct DedicatedWorkerInfo {
DedicatedWorkerInfo(int worker_process_id,
GlobalFrameRoutingId ancestor_render_frame_host_id);
~DedicatedWorkerInfo();
DedicatedWorkerInfo(const DedicatedWorkerInfo& info);
DedicatedWorkerInfo& operator=(const DedicatedWorkerInfo& info);
int worker_process_id; int worker_process_id;
GlobalFrameRoutingId ancestor_render_frame_host_id; GlobalFrameRoutingId ancestor_render_frame_host_id;
base::Optional<GURL> final_response_url;
}; };
base::flat_map<DedicatedWorkerId, DedicatedWorkerInfo> base::flat_map<DedicatedWorkerId, DedicatedWorkerInfo>
dedicated_worker_infos_; dedicated_worker_infos_;
......
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