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

Side by Side Diff: chrome/browser/extensions/webstore_install_helper.cc

Issue 931993002: Make image_decoder a Leaky LazyInstance (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: git cl format Created 5 years, 9 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/extensions/webstore_install_helper.h" 5 #include "chrome/browser/extensions/webstore_install_helper.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 14 matching lines...) Expand all
25 const char kImageDecodeError[] = "Image decode failed"; 25 const char kImageDecodeError[] = "Image decode failed";
26 26
27 } // namespace 27 } // namespace
28 28
29 namespace extensions { 29 namespace extensions {
30 30
31 WebstoreInstallHelper::WebstoreInstallHelper( 31 WebstoreInstallHelper::WebstoreInstallHelper(
32 Delegate* delegate, 32 Delegate* delegate,
33 const std::string& id, 33 const std::string& id,
34 const std::string& manifest, 34 const std::string& manifest,
35 const std::string& icon_data,
36 const GURL& icon_url, 35 const GURL& icon_url,
37 net::URLRequestContextGetter* context_getter) 36 net::URLRequestContextGetter* context_getter)
38 : delegate_(delegate), 37 : ImageDecoder::ImageRequest(
dcheng 2015/03/24 05:18:18 Just ImageRequest.
Theresa 2015/03/24 23:51:42 Done.
38 content::BrowserThread::GetMessageLoopProxyForThread(
39 content::BrowserThread::IO)),
40 delegate_(delegate),
39 id_(id), 41 id_(id),
40 manifest_(manifest), 42 manifest_(manifest),
41 icon_base64_data_(icon_data),
42 icon_url_(icon_url), 43 icon_url_(icon_url),
43 context_getter_(context_getter), 44 context_getter_(context_getter),
44 icon_decode_complete_(false), 45 icon_decode_complete_(false),
45 manifest_parse_complete_(false), 46 manifest_parse_complete_(false),
46 parse_error_(Delegate::UNKNOWN_ERROR) {} 47 parse_error_(Delegate::UNKNOWN_ERROR) {
48 }
47 49
48 WebstoreInstallHelper::~WebstoreInstallHelper() {} 50 WebstoreInstallHelper::~WebstoreInstallHelper() {}
49 51
50 void WebstoreInstallHelper::Start() { 52 void WebstoreInstallHelper::Start() {
51 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 53 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
52 CHECK(icon_base64_data_.empty() || icon_url_.is_empty());
53 54
54 if (icon_base64_data_.empty() && icon_url_.is_empty()) 55 if (icon_url_.is_empty())
55 icon_decode_complete_ = true; 56 icon_decode_complete_ = true;
56 57
57 BrowserThread::PostTask( 58 BrowserThread::PostTask(
58 BrowserThread::IO, 59 BrowserThread::IO,
59 FROM_HERE, 60 FROM_HERE,
60 base::Bind(&WebstoreInstallHelper::StartWorkOnIOThread, this)); 61 base::Bind(&WebstoreInstallHelper::StartWorkOnIOThread, this));
61 62
62 if (!icon_url_.is_empty()) { 63 if (!icon_url_.is_empty()) {
63 CHECK(context_getter_); 64 CHECK(context_getter_);
64 url_fetcher_.reset(net::URLFetcher::Create( 65 url_fetcher_.reset(net::URLFetcher::Create(
65 icon_url_, net::URLFetcher::GET, this)); 66 icon_url_, net::URLFetcher::GET, this));
66 url_fetcher_->SetRequestContext(context_getter_); 67 url_fetcher_->SetRequestContext(context_getter_);
67 url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES | 68 url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES |
68 net::LOAD_DO_NOT_SEND_COOKIES); 69 net::LOAD_DO_NOT_SEND_COOKIES);
69 70
70 url_fetcher_->Start(); 71 url_fetcher_->Start();
71 // We'll get called back in OnURLFetchComplete. 72 // We'll get called back in OnURLFetchComplete.
72 } 73 }
73 } 74 }
74 75
75 void WebstoreInstallHelper::StartWorkOnIOThread() { 76 void WebstoreInstallHelper::StartWorkOnIOThread() {
76 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 77 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
77 utility_host_ = UtilityProcessHost::Create( 78 utility_host_ = UtilityProcessHost::Create(
78 this, base::MessageLoopProxy::current().get())->AsWeakPtr(); 79 this, base::MessageLoopProxy::current().get())->AsWeakPtr();
79 utility_host_->StartBatchMode(); 80 utility_host_->StartBatchMode();
80 81
81 if (!icon_base64_data_.empty())
82 utility_host_->Send(
83 new ChromeUtilityMsg_DecodeImageBase64(icon_base64_data_));
84
85 utility_host_->Send(new ChromeUtilityMsg_ParseJSON(manifest_)); 82 utility_host_->Send(new ChromeUtilityMsg_ParseJSON(manifest_));
86 } 83 }
87 84
88 void WebstoreInstallHelper::OnURLFetchComplete( 85 void WebstoreInstallHelper::OnURLFetchComplete(
89 const net::URLFetcher* source) { 86 const net::URLFetcher* source) {
90 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 87 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
91 CHECK(source == url_fetcher_.get()); 88 CHECK(source == url_fetcher_.get());
92 int response_code = 89 int response_code =
93 source->GetStatus().is_success() ? source->GetResponseCode() : 0; 90 source->GetStatus().is_success() ? source->GetResponseCode() : 0;
94 if (!source->GetStatus().is_success() || 91 if (!source->GetStatus().is_success() ||
95 response_code / 100 == 4 || response_code / 100 == 5) { 92 response_code / 100 == 4 || response_code / 100 == 5) {
96 BrowserThread::PostTask( 93 BrowserThread::PostTask(
97 BrowserThread::IO, 94 BrowserThread::IO, FROM_HERE,
98 FROM_HERE,
99 base::Bind(&WebstoreInstallHelper::OnDecodeImageFailed, this)); 95 base::Bind(&WebstoreInstallHelper::OnDecodeImageFailed, this));
100 } else { 96 } else {
101 std::string response_data; 97 std::string response_data;
102 source->GetResponseAsString(&response_data); 98 source->GetResponseAsString(&response_data);
103 fetched_icon_data_.insert(fetched_icon_data_.begin(), 99
104 response_data.begin(), 100 ImageDecoder::Start(this, response_data, ImageDecoder::DEFAULT_CODEC,
105 response_data.end()); 101 false);
106 BrowserThread::PostTask(
107 BrowserThread::IO,
108 FROM_HERE,
109 base::Bind(&WebstoreInstallHelper::StartFetchedImageDecode, this));
110 } 102 }
111 url_fetcher_.reset(); 103 url_fetcher_.reset();
112 } 104 }
113 105
114 void WebstoreInstallHelper::StartFetchedImageDecode() {
115 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
116 CHECK(utility_host_.get());
117 utility_host_->Send(new ChromeUtilityMsg_DecodeImage(fetched_icon_data_,
118 false));
119 }
120
121
122 bool WebstoreInstallHelper::OnMessageReceived(const IPC::Message& message) { 106 bool WebstoreInstallHelper::OnMessageReceived(const IPC::Message& message) {
123 bool handled = true; 107 bool handled = true;
124 IPC_BEGIN_MESSAGE_MAP(WebstoreInstallHelper, message) 108 IPC_BEGIN_MESSAGE_MAP(WebstoreInstallHelper, message)
125 IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_DecodeImage_Succeeded,
126 OnDecodeImageSucceeded)
127 IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_DecodeImage_Failed,
128 OnDecodeImageFailed)
129 IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_ParseJSON_Succeeded, 109 IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_ParseJSON_Succeeded,
130 OnJSONParseSucceeded) 110 OnJSONParseSucceeded)
131 IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_ParseJSON_Failed, 111 IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_ParseJSON_Failed,
132 OnJSONParseFailed) 112 OnJSONParseFailed)
133 IPC_MESSAGE_UNHANDLED(handled = false) 113 IPC_MESSAGE_UNHANDLED(handled = false)
134 IPC_END_MESSAGE_MAP() 114 IPC_END_MESSAGE_MAP()
135 return handled; 115 return handled;
136 } 116 }
137 117
138 118 void WebstoreInstallHelper::OnImageDecoded(const SkBitmap& decoded_image) {
139 void WebstoreInstallHelper::OnDecodeImageSucceeded(
140 const SkBitmap& decoded_image) {
141 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 119 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
142 icon_ = decoded_image; 120 icon_ = decoded_image;
143 icon_decode_complete_ = true; 121 icon_decode_complete_ = true;
144 ReportResultsIfComplete(); 122 ReportResultsIfComplete();
145 } 123 }
146 124
147 void WebstoreInstallHelper::OnDecodeImageFailed() { 125 void WebstoreInstallHelper::OnDecodeImageFailed() {
148 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 126 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
149 icon_decode_complete_ = true; 127 icon_decode_complete_ = true;
150 error_ = kImageDecodeError; 128 error_ = kImageDecodeError;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 174
197 void WebstoreInstallHelper::ReportResultFromUIThread() { 175 void WebstoreInstallHelper::ReportResultFromUIThread() {
198 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 176 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
199 if (error_.empty() && parsed_manifest_) 177 if (error_.empty() && parsed_manifest_)
200 delegate_->OnWebstoreParseSuccess(id_, icon_, parsed_manifest_.release()); 178 delegate_->OnWebstoreParseSuccess(id_, icon_, parsed_manifest_.release());
201 else 179 else
202 delegate_->OnWebstoreParseFailure(id_, parse_error_, error_); 180 delegate_->OnWebstoreParseFailure(id_, parse_error_, error_);
203 } 181 }
204 182
205 } // namespace extensions 183 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/webstore_install_helper.h ('k') | chrome/browser/extensions/webstore_standalone_installer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698