Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(164)

Side by Side Diff: content/public/browser/render_process_host_utils.cc

Issue 2857263003: Task Manager should listen to WebContentsObserver::RenderFrameCreated. (Closed)
Patch Set: . Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/public/browser/render_process_host_utils.h"
6
7 #include "base/bind.h"
8 #include "base/macros.h"
9 #include "base/memory/ref_counted.h"
10 #include "base/memory/weak_ptr.h"
11 #include "base/sequenced_task_runner.h"
12 #include "base/threading/sequenced_task_runner_handle.h"
13 #include "content/public/browser/browser_thread.h"
14 #include "content/public/browser/render_process_host.h"
15 #include "content/public/browser/render_process_host_observer.h"
16
17 namespace content {
18
19 namespace {
20
21 class RenderProcessHostIsReadyObserver : public RenderProcessHostObserver {
22 public:
23 RenderProcessHostIsReadyObserver(RenderProcessHost* render_process_host,
24 base::OnceClosure task)
25 : render_process_host_(render_process_host),
26 task_(std::move(task)),
27 weak_factory_(this) {
28 render_process_host_->AddObserver(this);
29 if (render_process_host_->IsReady())
30 PostTask();
31 }
32
33 ~RenderProcessHostIsReadyObserver() override {
34 render_process_host_->RemoveObserver(this);
35 }
36
37 void RenderProcessReady(RenderProcessHost* host) override { PostTask(); }
38
39 void RenderProcessHostDestroyed(RenderProcessHost* host) override {
40 delete this;
41 }
42
43 private:
44 void PostTask() {
45 BrowserThread::PostTask(
46 BrowserThread::UI, FROM_HERE,
47 base::Bind(&RenderProcessHostIsReadyObserver::CallTask,
48 weak_factory_.GetWeakPtr()));
49 }
50
51 void CallTask() {
52 DCHECK_CURRENTLY_ON(BrowserThread::UI);
53 if (render_process_host_->IsReady()) {
54 std::move(task_).Run();
55 delete this;
56 }
57 }
58
59 RenderProcessHost* render_process_host_;
60 base::OnceClosure task_;
61 base::WeakPtrFactory<RenderProcessHostIsReadyObserver> weak_factory_;
62
63 DISALLOW_COPY_AND_ASSIGN(RenderProcessHostIsReadyObserver);
64 };
65
66 } // namespace
67
68 void PostTaskWhenRenderProcessHostIsReady(
69 RenderProcessHost* render_process_host,
70 base::OnceClosure task) {
71 DCHECK_CURRENTLY_ON(BrowserThread::UI);
72 DCHECK(render_process_host);
73 DCHECK(!task.is_null());
74 new RenderProcessHostIsReadyObserver(render_process_host, std::move(task));
75 }
76
77 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698