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

Side by Side Diff: content/child/notifications/notification_image_loader.cc

Issue 897733002: worker: Use standard task-runners to run notification image loader callbacks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: whoops Created 5 years, 10 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/child/notifications/notification_image_loader.h" 5 #include "content/child/notifications/notification_image_loader.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "content/child/child_thread_impl.h" 8 #include "content/child/child_thread_impl.h"
9 #include "content/child/image_decoder.h" 9 #include "content/child/image_decoder.h"
10 #include "content/child/worker_task_runner.h"
11 #include "third_party/WebKit/public/platform/Platform.h" 10 #include "third_party/WebKit/public/platform/Platform.h"
12 #include "third_party/WebKit/public/platform/WebURL.h" 11 #include "third_party/WebKit/public/platform/WebURL.h"
13 #include "third_party/WebKit/public/platform/WebURLLoader.h" 12 #include "third_party/WebKit/public/platform/WebURLLoader.h"
14 #include "third_party/skia/include/core/SkBitmap.h" 13 #include "third_party/skia/include/core/SkBitmap.h"
15 14
16 using blink::WebURL; 15 using blink::WebURL;
17 using blink::WebURLError; 16 using blink::WebURLError;
18 using blink::WebURLLoader; 17 using blink::WebURLLoader;
19 using blink::WebURLRequest; 18 using blink::WebURLRequest;
20 19
21 namespace content { 20 namespace content {
22 21
23 NotificationImageLoader::NotificationImageLoader( 22 NotificationImageLoader::NotificationImageLoader(
24 const NotificationImageLoadedCallback& callback) 23 const NotificationImageLoadedCallback& callback)
25 : callback_(callback), 24 : callback_(callback),
26 completed_(false) {} 25 completed_(false) {}
27 26
28 NotificationImageLoader::~NotificationImageLoader() {} 27 NotificationImageLoader::~NotificationImageLoader() {}
29 28
30 void NotificationImageLoader::StartOnMainThread(const WebURL& image_url, 29 void NotificationImageLoader::StartOnMainThread(
31 int worker_thread_id) { 30 const WebURL& image_url,
31 const scoped_refptr<base::SingleThreadTaskRunner>& worker_task_runner) {
32 DCHECK(ChildThreadImpl::current()); 32 DCHECK(ChildThreadImpl::current());
33 DCHECK(!url_loader_); 33 DCHECK(!url_loader_);
34 DCHECK(worker_task_runner);
34 35
35 worker_thread_id_ = worker_thread_id; 36 worker_task_runner_ = worker_task_runner;
36 37
37 WebURLRequest request(image_url); 38 WebURLRequest request(image_url);
38 request.setRequestContext(WebURLRequest::RequestContextImage); 39 request.setRequestContext(WebURLRequest::RequestContextImage);
39 40
40 url_loader_.reset(blink::Platform::current()->createURLLoader()); 41 url_loader_.reset(blink::Platform::current()->createURLLoader());
41 url_loader_->loadAsynchronously(request, this); 42 url_loader_->loadAsynchronously(request, this);
42 } 43 }
43 44
44 SkBitmap NotificationImageLoader::GetDecodedImage() const { 45 SkBitmap NotificationImageLoader::GetDecodedImage() const {
45 if (buffer_.empty()) 46 if (buffer_.empty())
(...skipping 26 matching lines...) Expand all
72 void NotificationImageLoader::didFail(WebURLLoader* loader, 73 void NotificationImageLoader::didFail(WebURLLoader* loader,
73 const WebURLError& error) { 74 const WebURLError& error) {
74 if (completed_) 75 if (completed_)
75 return; 76 return;
76 77
77 RunCallbackOnWorkerThread(); 78 RunCallbackOnWorkerThread();
78 } 79 }
79 80
80 void NotificationImageLoader::RunCallbackOnWorkerThread() { 81 void NotificationImageLoader::RunCallbackOnWorkerThread() {
81 scoped_refptr<NotificationImageLoader> loader = make_scoped_refptr(this); 82 scoped_refptr<NotificationImageLoader> loader = make_scoped_refptr(this);
82 if (!worker_thread_id_) { 83 if (worker_task_runner_->BelongsToCurrentThread())
83 callback_.Run(loader); 84 callback_.Run(loader);
84 return; 85 else
85 } 86 worker_task_runner_->PostTask(FROM_HERE, base::Bind(callback_, loader));
86
87 WorkerTaskRunner::Instance()->PostTask(
88 worker_thread_id_,
89 base::Bind(callback_, loader));
90 } 87 }
91 88
92 } // namespace content 89 } // namespace content
OLDNEW
« no previous file with comments | « content/child/notifications/notification_image_loader.h ('k') | content/child/notifications/notification_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698