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

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: Refactor webstore_install_helper to use ImageDecoder, remove DecodeBase64 support 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 : delegate_(delegate),
39 id_(id), 38 id_(id),
40 manifest_(manifest), 39 manifest_(manifest),
41 icon_base64_data_(icon_data),
42 icon_url_(icon_url), 40 icon_url_(icon_url),
43 context_getter_(context_getter), 41 context_getter_(context_getter),
44 icon_decode_complete_(false), 42 icon_decode_complete_(false),
45 manifest_parse_complete_(false), 43 manifest_parse_complete_(false),
46 parse_error_(Delegate::UNKNOWN_ERROR) {} 44 parse_error_(Delegate::UNKNOWN_ERROR) {}
47 45
48 WebstoreInstallHelper::~WebstoreInstallHelper() {} 46 WebstoreInstallHelper::~WebstoreInstallHelper() {}
49 47
50 void WebstoreInstallHelper::Start() { 48 void WebstoreInstallHelper::Start() {
51 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 49 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
52 CHECK(icon_base64_data_.empty() || icon_url_.is_empty());
53 50
54 if (icon_base64_data_.empty() && icon_url_.is_empty()) 51 if (icon_url_.is_empty())
55 icon_decode_complete_ = true; 52 icon_decode_complete_ = true;
56 53
57 BrowserThread::PostTask( 54 BrowserThread::PostTask(
58 BrowserThread::IO, 55 BrowserThread::IO,
59 FROM_HERE, 56 FROM_HERE,
60 base::Bind(&WebstoreInstallHelper::StartWorkOnIOThread, this)); 57 base::Bind(&WebstoreInstallHelper::StartWorkOnIOThread, this));
61 58
62 if (!icon_url_.is_empty()) { 59 if (!icon_url_.is_empty()) {
63 CHECK(context_getter_); 60 CHECK(context_getter_);
64 url_fetcher_.reset(net::URLFetcher::Create( 61 url_fetcher_.reset(net::URLFetcher::Create(
65 icon_url_, net::URLFetcher::GET, this)); 62 icon_url_, net::URLFetcher::GET, this));
66 url_fetcher_->SetRequestContext(context_getter_); 63 url_fetcher_->SetRequestContext(context_getter_);
67 url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES | 64 url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES |
68 net::LOAD_DO_NOT_SEND_COOKIES); 65 net::LOAD_DO_NOT_SEND_COOKIES);
69 66
70 url_fetcher_->Start(); 67 url_fetcher_->Start();
71 // We'll get called back in OnURLFetchComplete. 68 // We'll get called back in OnURLFetchComplete.
72 } 69 }
73 } 70 }
74 71
75 void WebstoreInstallHelper::StartWorkOnIOThread() { 72 void WebstoreInstallHelper::StartWorkOnIOThread() {
76 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 73 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
77 utility_host_ = UtilityProcessHost::Create( 74 utility_host_ = UtilityProcessHost::Create(
78 this, base::MessageLoopProxy::current().get())->AsWeakPtr(); 75 this, base::MessageLoopProxy::current().get())->AsWeakPtr();
79 utility_host_->StartBatchMode(); 76 utility_host_->StartBatchMode();
80 77
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_)); 78 utility_host_->Send(new ChromeUtilityMsg_ParseJSON(manifest_));
86 } 79 }
87 80
88 void WebstoreInstallHelper::OnURLFetchComplete( 81 void WebstoreInstallHelper::OnURLFetchComplete(
89 const net::URLFetcher* source) { 82 const net::URLFetcher* source) {
90 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 83 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
91 CHECK(source == url_fetcher_.get()); 84 CHECK(source == url_fetcher_.get());
92 int response_code = 85 int response_code =
93 source->GetStatus().is_success() ? source->GetResponseCode() : 0; 86 source->GetStatus().is_success() ? source->GetResponseCode() : 0;
94 if (!source->GetStatus().is_success() || 87 if (!source->GetStatus().is_success() ||
95 response_code / 100 == 4 || response_code / 100 == 5) { 88 response_code / 100 == 4 || response_code / 100 == 5) {
96 BrowserThread::PostTask( 89 BrowserThread::PostTask(
97 BrowserThread::IO, 90 BrowserThread::IO, FROM_HERE,
98 FROM_HERE,
99 base::Bind(&WebstoreInstallHelper::OnDecodeImageFailed, this)); 91 base::Bind(&WebstoreInstallHelper::OnDecodeImageFailed, this));
100 } else { 92 } else {
101 std::string response_data; 93 std::string response_data;
102 source->GetResponseAsString(&response_data); 94 source->GetResponseAsString(&response_data);
103 fetched_icon_data_.insert(fetched_icon_data_.begin(), 95 fetched_icon_data_.insert(fetched_icon_data_.begin(),
104 response_data.begin(), 96 response_data.begin(),
105 response_data.end()); 97 response_data.end());
106 BrowserThread::PostTask( 98 BrowserThread::PostTask(
107 BrowserThread::IO, 99 BrowserThread::IO,
108 FROM_HERE, 100 FROM_HERE,
109 base::Bind(&WebstoreInstallHelper::StartFetchedImageDecode, this)); 101 base::Bind(&WebstoreInstallHelper::StartFetchedImageDecode, this));
110 } 102 }
111 url_fetcher_.reset(); 103 url_fetcher_.reset();
112 } 104 }
113 105
114 void WebstoreInstallHelper::StartFetchedImageDecode() { 106 void WebstoreInstallHelper::StartFetchedImageDecode() {
115 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 107 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
116 CHECK(utility_host_.get()); 108 ImageDecoder::GetInstance()->Start(
117 utility_host_->Send(new ChromeUtilityMsg_DecodeImage(fetched_icon_data_, 109 this, std::string(fetched_icon_data_.begin(), fetched_icon_data_.end()),
asargent_no_longer_on_chrome 2015/03/12 21:40:08 I think we should just change fetched_icon_data_ t
Theresa 2015/03/12 22:19:10 Good catch :) Instead of doing that, I removed thi
118 false)); 110 ImageDecoder::DEFAULT_CODEC,
111 content::BrowserThread::GetMessageLoopProxyForThread(
112 content::BrowserThread::IO),
113 false);
119 } 114 }
120 115
121
122 bool WebstoreInstallHelper::OnMessageReceived(const IPC::Message& message) { 116 bool WebstoreInstallHelper::OnMessageReceived(const IPC::Message& message) {
123 bool handled = true; 117 bool handled = true;
124 IPC_BEGIN_MESSAGE_MAP(WebstoreInstallHelper, message) 118 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, 119 IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_ParseJSON_Succeeded,
130 OnJSONParseSucceeded) 120 OnJSONParseSucceeded)
131 IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_ParseJSON_Failed, 121 IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_ParseJSON_Failed,
132 OnJSONParseFailed) 122 OnJSONParseFailed)
133 IPC_MESSAGE_UNHANDLED(handled = false) 123 IPC_MESSAGE_UNHANDLED(handled = false)
134 IPC_END_MESSAGE_MAP() 124 IPC_END_MESSAGE_MAP()
135 return handled; 125 return handled;
136 } 126 }
137 127
138 128 void WebstoreInstallHelper::OnImageDecoded(const SkBitmap& decoded_image) {
139 void WebstoreInstallHelper::OnDecodeImageSucceeded(
140 const SkBitmap& decoded_image) {
141 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 129 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
142 icon_ = decoded_image; 130 icon_ = decoded_image;
143 icon_decode_complete_ = true; 131 icon_decode_complete_ = true;
144 ReportResultsIfComplete(); 132 ReportResultsIfComplete();
145 } 133 }
146 134
147 void WebstoreInstallHelper::OnDecodeImageFailed() { 135 void WebstoreInstallHelper::OnDecodeImageFailed() {
148 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 136 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
149 icon_decode_complete_ = true; 137 icon_decode_complete_ = true;
150 error_ = kImageDecodeError; 138 error_ = kImageDecodeError;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 184
197 void WebstoreInstallHelper::ReportResultFromUIThread() { 185 void WebstoreInstallHelper::ReportResultFromUIThread() {
198 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 186 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
199 if (error_.empty() && parsed_manifest_) 187 if (error_.empty() && parsed_manifest_)
200 delegate_->OnWebstoreParseSuccess(id_, icon_, parsed_manifest_.release()); 188 delegate_->OnWebstoreParseSuccess(id_, icon_, parsed_manifest_.release());
201 else 189 else
202 delegate_->OnWebstoreParseFailure(id_, parse_error_, error_); 190 delegate_->OnWebstoreParseFailure(id_, parse_error_, error_);
203 } 191 }
204 192
205 } // namespace extensions 193 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698