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

Side by Side Diff: chrome/browser/chromeos/dom_ui/imageburner_ui.cc

Issue 2808100: Code implements UI for downloading and burning Chrome OS images on SSD card a... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 4 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2010 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 "chrome/browser/chromeos/dom_ui/imageburner_ui.h"
6
7 #include "base/i18n/rtl.h"
8 #include "app/l10n_util.h"
9 #include "app/resource_bundle.h"
10 #include "base/message_loop.h"
11 #include "base/path_service.h"
12 #include "base/singleton.h"
13 #include "base/string_util.h"
14 #include "base/task.h"
15 #include "base/utf_string_conversions.h"
16 #include "base/values.h"
17
18 #include "chrome/browser/chrome_thread.h"
19 #include "chrome/browser/download/download_types.h"
20 #include "chrome/browser/download/download_util.h"
21 #include "chrome/browser/profile.h"
22 #include "chrome/common/chrome_paths.h"
23 #include "chrome/common/jstemplate_builder.h"
24 #include "chrome/common/url_constants.h"
25 #include "grit/browser_resources.h"
26 #include "grit/generated_resources.h"
27 #include "grit/locale_settings.h"
28
29
30 ////////////////////////////////////////////////////////////////////////////////
31 //
32 // ImageBurnUIHTMLSource
33 //
34 ////////////////////////////////////////////////////////////////////////////////
35
36 ImageBurnUIHTMLSource::ImageBurnUIHTMLSource()
37 : DataSource(chrome::kChromeUIImageBurnerHost, MessageLoop::current()) {
38 }
39
40 void ImageBurnUIHTMLSource::StartDataRequest(const std::string& path,
41 bool is_off_the_record,
42 int request_id) {
43 DictionaryValue localized_strings;
44 localized_strings.SetString("burnConfirmText1",
45 l10n_util::GetStringUTF16(IDS_IMAGEBURN_CONFIM_BURN1));
46 localized_strings.SetString("burnConfirmText2",
47 l10n_util::GetStringUTF16(IDS_IMAGEBURN_CONFIM_BURN2));
tony 2011/08/04 17:18:45 This is the wrong way to localize a sentence with
48 localized_strings.SetString("burnUnsuccessfulMessage",
49 l10n_util::GetStringUTF16(IDS_IMAGEBURN_BURN_UNSUCCESSFUL));
50 localized_strings.SetString("burnSuccessfulMessage",
51 l10n_util::GetStringUTF16(IDS_IMAGEBURN_BURN_SUCCESSFUL));
52 localized_strings.SetString("downloadAbortedMessage",
53 l10n_util::GetStringUTF16(IDS_IMAGEBURN_DOWNLOAD_UNSUCCESSFUL));
54 localized_strings.SetString("title",
55 l10n_util::GetStringUTF16(IDS_IMAGEBURN_TITLE));
56 localized_strings.SetString("listTitle",
57 l10n_util::GetStringUTF16(IDS_IMAGEBURN_ROOT_LIST_TITLE));
58 localized_strings.SetString("downloadStatusStart",
59 l10n_util::GetStringUTF16(IDS_IMAGEBURN_DOWNLOAD_STARTING_STATUS));
60 localized_strings.SetString("downloadStatusInProgress",
61 l10n_util::GetStringUTF16(IDS_IMAGEBURN_DOWNLOAD_IN_PROGRESS_STATUS));
62 localized_strings.SetString("downloadStatusComplete",
63 l10n_util::GetStringUTF16(IDS_IMAGEBURN_DOWNLOAD_COMPLETE_STATUS));
64 localized_strings.SetString("downloadStatusCanceled",
65 l10n_util::GetStringUTF16(IDS_IMAGEBURN_DOWNLOAD_CANCELED_STATUS));
66 localized_strings.SetString("burnStatusStart",
67 l10n_util::GetStringUTF16(IDS_IMAGEBURN_BURN_STARTING_STATUS));
68 localized_strings.SetString("burnStatusInProgress",
69 l10n_util::GetStringUTF16(IDS_IMAGEBURN_BURN_IN_PROGRESS_STATUS));
70 localized_strings.SetString("burnStatusComplete",
71 l10n_util::GetStringUTF16(IDS_IMAGEBURN_BURN_COMPLETE_STATUS));
72 localized_strings.SetString("burnStatusCanceled",
73 l10n_util::GetStringUTF16(IDS_IMAGEBURN_BURN_CANCELED_STATUS));
74
75 SetFontAndTextDirection(&localized_strings);
76
77 static const base::StringPiece imageburn_html(
78 ResourceBundle::GetSharedInstance().GetRawDataResource(
79 IDR_IMAGEBURNER_HTML));
80 const std::string full_html = jstemplate_builder::GetI18nTemplateHtml(
81 imageburn_html, &localized_strings);
82
83 scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes);
84 html_bytes->data.resize(full_html.size());
85 std::copy(full_html.begin(), full_html.end(), html_bytes->data.begin());
86
87 SendResponse(request_id, html_bytes);
88 }
89
90 ////////////////////////////////////////////////////////////////////////////////
91 //
92 // ImageBurnHandler
93 //
94 ////////////////////////////////////////////////////////////////////////////////
95
96 ImageBurnHandler::ImageBurnHandler(TabContents* contents)
97 :tab_contents_(contents),
98 download_manager_(NULL),
99 download_item_observer_added_(false),
100 active_download_item_(NULL),
101 burn_resource_manager_(NULL) {
102 chromeos::MountLibrary* mount_lib =
103 chromeos::CrosLibrary::Get()->GetMountLibrary();
104 mount_lib->AddObserver(this);
105 chromeos::BurnLibrary* burn_lib =
106 chromeos::CrosLibrary::Get()->GetBurnLibrary();
107 burn_lib->AddObserver(this);
108 local_image_file_path_.clear();
109 burn_resource_manager_ = Singleton<ImageBurnResourceManager>::get();
110 }
111
112 ImageBurnHandler::~ImageBurnHandler() {
113 chromeos::MountLibrary* mount_lib =
114 chromeos::CrosLibrary::Get()->GetMountLibrary();
115 mount_lib->RemoveObserver(this);
116 chromeos::BurnLibrary* burn_lib =
117 chromeos::CrosLibrary::Get()->GetBurnLibrary();
118 burn_lib->RemoveObserver(this);
119 if (active_download_item_) {
120 active_download_item_->RemoveObserver(this);
121 }
122 if (download_manager_)
123 download_manager_->RemoveObserver(this);
124 }
125
126 DOMMessageHandler* ImageBurnHandler::Attach(DOMUI* dom_ui) {
127 return DOMMessageHandler::Attach(dom_ui);
128 }
129
130 void ImageBurnHandler::RegisterMessages() {
131 dom_ui_->RegisterMessageCallback("getRoots",
132 NewCallback(this, &ImageBurnHandler::HandleGetRoots));
133 dom_ui_->RegisterMessageCallback("downloadImage",
134 NewCallback(this, &ImageBurnHandler::HandleDownloadImage));
135 dom_ui_->RegisterMessageCallback("burnImage",
136 NewCallback(this, &ImageBurnHandler::HandleBurnImage));
137 dom_ui_->RegisterMessageCallback("cancelBurnImage",
138 NewCallback(this, &ImageBurnHandler::HandleCancelBurnImage));
139 }
140
141 void ImageBurnHandler::MountChanged(chromeos::MountLibrary* obj,
142 chromeos::MountEventType evt,
143 const std::string& path) {
144 if ((evt == chromeos::DISK_REMOVED ||
145 evt == chromeos::DISK_CHANGED ||
146 evt == chromeos::DEVICE_REMOVED)) {
147 dom_ui_->CallJavascriptFunction(L"rootsChanged");
148 }
149 }
150
151 void ImageBurnHandler::ProgressUpdated(chromeos::BurnLibrary* object,
152 chromeos::BurnEventType evt,
153 const ImageBurnStatus& status) {
154 UpdateBurnProgress(status.amount_burnt, status.total_size,
155 status.target_path, evt);
156 }
157
158 void ImageBurnHandler::OnDownloadUpdated(DownloadItem* download) {
159 if (download->state() != DownloadItem::CANCELLED
160 && download->state() != DownloadItem::COMPLETE) {
161 scoped_ptr<DictionaryValue> result_value(
162 download_util::CreateDownloadItemValue(download, 0));
163 dom_ui_->CallJavascriptFunction(L"downloadUpdated", *result_value);
164 }
165 if (download->state() == DownloadItem::CANCELLED)
166 DownloadCompleted(false);
167 }
168
169 void ImageBurnHandler::OnDownloadFileCompleted(DownloadItem* download) {
170 DCHECK(download->state() == DownloadItem::COMPLETE);
171 local_image_file_path_ = download->full_path();
172 DownloadCompleted(true);
173 }
174
175 void ImageBurnHandler::OnDownloadOpened(DownloadItem* download) {
176 if (download->safety_state() == DownloadItem::DANGEROUS)
177 download->DangerousDownloadValidated();
178 }
179
180 void ImageBurnHandler::ModelChanged() {
181 std::vector<DownloadItem*> downloads;
182 download_manager_->GetTemporaryDownloads(
183 burn_resource_manager_->GetLocalImageDirPath(), &downloads);
184 if (download_item_observer_added_)
185 return;
186 std::vector<DownloadItem*>::const_iterator it = downloads.begin();
187 for (; it != downloads.end(); ++it) {
188 if ((*it)->url() == *image_download_url_) {
189 download_item_observer_added_ = true;
190 (*it)->AddObserver(this);
191 active_download_item_ = *it;
192 break;
193 }
194 }
195 }
196
197 void ImageBurnHandler::HandleGetRoots(const ListValue* args) {
198 ListValue results_value;
199 DictionaryValue info_value;
200 chromeos::MountLibrary* mount_lib =
201 chromeos::CrosLibrary::Get()->GetMountLibrary();
202 const chromeos::MountLibrary::DiskVector& disks = mount_lib->disks();
203 if (!burn_resource_manager_->CheckBurnInProgress()) {
204 for (size_t i = 0; i < disks.size(); ++i) {
205 if (!disks[i].mount_path.empty()) {
206 DictionaryValue* page_value = new DictionaryValue();
207 FilePath disk_path = FilePath(disks[i].system_path).DirName();
208 std::string title = "/dev/" + disk_path.BaseName().value();
209 page_value->SetString(kPropertyTitle, title);
210 page_value->SetString(kPropertyPath, title);
211 page_value->SetBoolean(kPropertyDirectory, true);
212 results_value.Append(page_value);
213 }
214 }
215 }
216 info_value.SetString("functionCall", "getRoots");
217 info_value.SetString(kPropertyPath, "");
218 dom_ui_->CallJavascriptFunction(L"browseFileResult",
219 info_value, results_value);
220 }
221
222 void ImageBurnHandler::HandleDownloadImage(const ListValue* args) {
223 ExtractTargetedDeviceSystemPath(args);
224 CreateLocalImagePath();
225 CreateImageUrl();
226 }
227
228 void ImageBurnHandler::HandleBurnImage(const ListValue* args) {
229 ImageBurnTaskProxy* task = new ImageBurnTaskProxy(AsWeakPtr());
230 task->AddRef();
231 ChromeThread::PostTask(
232 ChromeThread::UI, FROM_HERE,
233 NewRunnableMethod(task, &ImageBurnTaskProxy::BurnImage));
234 }
235
236 void ImageBurnHandler::HandleCancelBurnImage(const ListValue* args) {
237 image_target_.clear();
238 }
239
240 void ImageBurnHandler::DownloadCompleted(bool is_successful) {
241 burn_resource_manager_-> ReportDownloadFinished(is_successful);
242 if (active_download_item_) {
243 active_download_item_->RemoveObserver(this);
244 active_download_item_ = NULL;
245 }
246 download_item_observer_added_ = false;
247
248 DictionaryValue signal_value;
249 if (is_successful) {
250 signal_value.SetString("state", "COMPLETE");
251 dom_ui_->CallJavascriptFunction(L"downloadUpdated", signal_value);
252 dom_ui_->CallJavascriptFunction(L"promtUserDownloadFinished");
253 } else {
254 signal_value.SetString("state", "CANCELLED");
255 dom_ui_->CallJavascriptFunction(L"downloadUpdated", signal_value);
256 dom_ui_->CallJavascriptFunction(L"alertUserDownloadAborted");
257 }
258 }
259
260 void ImageBurnHandler::BurnImage() {
261 chromeos::BurnLibrary* burn_lib =
262 chromeos::CrosLibrary::Get()->GetBurnLibrary();
263 if (burn_lib->DoBurn(local_image_file_path_, image_target_)) {
264 DictionaryValue signal_value;
265 signal_value.SetString("state", "IN_PROGRESS");
266 signal_value.SetInteger("amount_burnt", 0);
267 signal_value.SetString("progress_status_text", "");
268 dom_ui_->CallJavascriptFunction(L"burnUpdated", signal_value);
269 }
270 }
271
272 void ImageBurnHandler::FinalizeBurn(bool successful) {
273 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
274 if (successful)
275 dom_ui_->CallJavascriptFunction(L"burnSuccessful");
276 else
277 dom_ui_->CallJavascriptFunction(L"burnUnsuccessful");
278 }
279
280 void ImageBurnHandler::UpdateBurnProgress(int64 total_burnt,
281 int64 image_size,
282 const std::string& path,
283 chromeos::BurnEventType event) {
284 DictionaryValue progress_value;
285 progress_value.SetString("progress_status_text",
286 WideToUTF16Hack(GetBurnProgressText(total_burnt, image_size)));
287 if (event == chromeos::BURN_UPDATED)
288 progress_value.SetString("state", "IN_PROGRESS");
289 else if (event == chromeos::BURN_CANCELED)
290 progress_value.SetString("state", "CANCELLED");
291 else if (event == chromeos::BURN_COMPLETE)
292 progress_value.SetString("state", "COMPLETE");
293 progress_value.SetInteger("received", total_burnt);
294 progress_value.SetInteger("total", image_size);
295 progress_value.SetString("path", path);
296
297 dom_ui_->CallJavascriptFunction(L"burnProgressUpdated", progress_value);
298 }
299
300 std::wstring ImageBurnHandler::GetBurnProgressText(int64 total_burnt,
301 int64 image_size) {
302 DataUnits amount_units = GetByteDisplayUnits(total_burnt);
303 std::wstring burnt_size =
304 UTF16ToWideHack(FormatBytes(total_burnt, amount_units, true));
305
306 std::wstring burnt_size_localized;
307 if (base::i18n::AdjustStringForLocaleDirection(burnt_size,
308 &burnt_size_localized)) {
309 burnt_size.assign(burnt_size_localized);
310 }
311
312 if (image_size) {
313 amount_units = GetByteDisplayUnits(image_size);
314 std::wstring total_text =
315 UTF16ToWideHack(FormatBytes(image_size, amount_units, true));
316 std::wstring total_text_localized;
317 if (base::i18n::AdjustStringForLocaleDirection(total_text,
318 &total_text_localized))
319 total_text.assign(total_text_localized);
320
321 return l10n_util::GetStringF(IDS_IMAGEBURN_BURN_PROGRESS,
322 burnt_size,
323 total_text);
324 } else {
325 return l10n_util::GetStringF(IDS_IMAGEBURN_BURN_PROGRESS_SIZE_UNKNOWN,
326 burnt_size);
327 }
328 }
329
330 void ImageBurnHandler::CreateImageUrl() {
331 ImageBurnTaskProxy* task = new ImageBurnTaskProxy(AsWeakPtr());
332 task->AddRef();
333 task->CreateImageUrl(tab_contents_, this);
334 }
335
336 void ImageBurnHandler::CreateImageUrlCallback(GURL* image_url) {
337 if (!image_url) {
338 DownloadCompleted(false);
339 return;
340 }
341 image_download_url_ = image_url;
342
343 download_manager_ = tab_contents_->profile()->GetDownloadManager();
344 download_manager_->AddObserver(this);
345
346 ImageBurnTaskProxy* task = new ImageBurnTaskProxy(AsWeakPtr());
347 task->AddRef();
348
349 if (!task->ReportDownloadInitialized()) {
350 DownloadSaveInfo save_info;
351 save_info.file_path = local_image_file_path_;
352 net::FileStream* file_stream =
353 burn_resource_manager_->CreateFileStream(&local_image_file_path_);
354 if (!file_stream) {
355 DownloadCompleted(false);
356 return;
357 }
358 save_info.file_stream = linked_ptr<net::FileStream>(file_stream);
359
360 download_manager_->DownloadUrlToFile(*image_download_url_,
361 tab_contents_->GetURL(),
362 tab_contents_->encoding(),
363 save_info,
364 tab_contents_);
365 } else if (task->CheckDownloadFinished()) {
366 DownloadCompleted(true);
367 }
368 }
369
370 void ImageBurnHandler::ExtractTargetedDeviceSystemPath(
371 const ListValue* list_value) {
372 Value* list_member;
373 std::string image_dest;
374 if (list_value->Get(0, &list_member) &&
375 list_member->GetType() == Value::TYPE_STRING) {
376 const StringValue* string_value =
377 static_cast<const StringValue*>(list_member);
378 string_value->GetAsString(&image_dest);
379 } else {
380 LOG(ERROR) << "Unable to get path string";
381 return;
382 }
383 image_target_ = FilePath(image_dest);
384 }
385
386 void ImageBurnHandler::CreateLocalImagePath() {
387 local_image_file_path_ =
388 burn_resource_manager_->GetLocalImageDirPath().Append(kImageFileName);
389 }
390
391 ////////////////////////////////////////////////////////////////////////////////
392 //
393 // ImageBurnTaskProxy
394 //
395 ////////////////////////////////////////////////////////////////////////////////
396 ImageBurnTaskProxy::ImageBurnTaskProxy(
397 const base::WeakPtr<ImageBurnHandler>& handler)
398 : handler_(handler) {
399 resource_manager_ = Singleton<ImageBurnResourceManager>::get();
400 }
401
402 bool ImageBurnTaskProxy::ReportDownloadInitialized() {
403 bool initialized = resource_manager_-> CheckImageDownloadStarted();
404 if (!initialized)
405 resource_manager_-> ReportImageDownloadStarted();
406 return initialized;
407 }
408
409 bool ImageBurnTaskProxy::CheckDownloadFinished() {
410 return resource_manager_->CheckDownloadFinished();
411 }
412
413 void ImageBurnTaskProxy:: BurnImage() {
414 if (!resource_manager_->CheckBurnInProgress() && handler_) {
415 resource_manager_->SetBurnInProgress(true);
416 handler_->BurnImage();
417 }
418 }
419
420 void ImageBurnTaskProxy::FinalizeBurn(bool success) {
421 if (handler_) {
422 handler_->FinalizeBurn(success);
423 resource_manager_->SetBurnInProgress(false);
424 }
425 }
426
427 void ImageBurnTaskProxy::CreateImageUrl(TabContents* tab_contents,
428 ImageBurnHandler* downloader) {
429 resource_manager_->CreateImageUrl(tab_contents, downloader);
430 }
431
432
433 ////////////////////////////////////////////////////////////////////////////////
434 //
435 // ImageBurnResourceManager
436 //
437 ////////////////////////////////////////////////////////////////////////////////
438
439 ImageBurnResourceManager::ImageBurnResourceManager()
440 : image_download_started_(false),
441 image_download_finished_(false),
442 burn_in_progress_(false),
443 download_manager_(NULL),
444 download_item_observer_added_(false),
445 active_download_item_(NULL),
446 image_url_(NULL),
447 image_fetcher_url_(kImageBaseURL + kImageFetcherName),
448 image_url_fetching_requested_(false),
449 image_url_fetched_(false) {
450 local_image_dir_file_path_.clear();
451 image_fecher_local_path_ = GetLocalImageDirPath().Append(kImageFetcherName);
452 }
453
454 ImageBurnResourceManager::~ImageBurnResourceManager() {
455 if (!local_image_dir_file_path_.empty()) {
456 file_util::Delete(local_image_dir_file_path_, true);
457 }
458 if (active_download_item_) {
459 active_download_item_->RemoveObserver(this);
460 }
461 if (download_manager_)
462 download_manager_->RemoveObserver(this);
463 }
464
465 void ImageBurnResourceManager::OnDownloadUpdated(DownloadItem* download) {
466 if (download->state() == DownloadItem::CANCELLED) {
467 image_url_.reset();
468 ImageUrlFetched(false);
469 }
470 }
471
472 void ImageBurnResourceManager::OnDownloadFileCompleted(DownloadItem* download) {
473 DCHECK(download->state() == DownloadItem::COMPLETE);
474 std::string image_url;
475 if (file_util::ReadFileToString(image_fecher_local_path_, &image_url)) {
476 image_url_.reset(new GURL(kImageBaseURL + image_url));
477 ImageUrlFetched(true);
478 } else {
479 image_url_.reset();
480 ImageUrlFetched(false);
481 }
482 }
483
484 void ImageBurnResourceManager::OnDownloadOpened(DownloadItem* download) { }
485
486 void ImageBurnResourceManager::ModelChanged() {
487 std::vector<DownloadItem*> downloads;
488 download_manager_->GetTemporaryDownloads(GetLocalImageDirPath(), &downloads);
489
490 if (download_item_observer_added_)
491 return;
492 std::vector<DownloadItem*>::const_iterator it = downloads.begin();
493 for (; it != downloads.end(); ++it) {
494 if ((*it)->url() == image_fetcher_url_) {
495 download_item_observer_added_ = true;
496 (*it)->AddObserver(this);
497 active_download_item_ = *it;
498 }
499 }
500 }
501
502 FilePath ImageBurnResourceManager::GetLocalImageDirPath() {
503 if (local_image_dir_file_path_.empty()) {
504 CHECK(PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS,
505 &local_image_dir_file_path_));
506 local_image_dir_file_path_ =
507 local_image_dir_file_path_.Append(kTempImageFolderName);
508 file_util::CreateDirectory(local_image_dir_file_path_);
509 }
510 return local_image_dir_file_path_;
511 }
512
513 bool ImageBurnResourceManager::CheckImageDownloadStarted() {
514 return image_download_started_;
515 }
516
517 void ImageBurnResourceManager::ReportImageDownloadStarted() {
518 image_download_started_ = true;
519 }
520
521 bool ImageBurnResourceManager::CheckDownloadFinished() {
522 return image_download_finished_;
523 }
524
525 bool ImageBurnResourceManager::CheckBurnInProgress() {
526 return burn_in_progress_;
527 }
528
529 void ImageBurnResourceManager::SetBurnInProgress(bool value) {
530 burn_in_progress_ = value;
531 }
532
533 void ImageBurnResourceManager::ReportDownloadFinished(bool success) {
534 if (!image_download_started_)
535 return;
536 if (!success)
537 image_download_started_ = false;
538 image_download_finished_ = success;
539 }
540
541 void ImageBurnResourceManager::CreateImageUrl(TabContents* tab_contents,
542 ImageBurnHandler* downloader) {
543 if (image_url_fetched_) {
544 downloader->CreateImageUrlCallback(image_url_.get());
545 return;
546 }
547 downloaders_.push_back(downloader);
548
549 if (image_url_fetching_requested_) {
550 return;
551 }
552 image_url_fetching_requested_ = true;
553
554 download_manager_ = tab_contents->profile()->GetDownloadManager();
555 download_manager_->AddObserver(this);
556
557 DownloadSaveInfo save_info;
558 save_info.file_path = image_fecher_local_path_;
559 net::FileStream* file_stream = CreateFileStream(&image_fecher_local_path_);
560 if (!file_stream) {
561 ImageUrlFetched(false);
562 return;
563 }
564 save_info.file_stream = linked_ptr<net::FileStream>(file_stream);
565 download_manager_->DownloadUrlToFile(image_fetcher_url_,
566 tab_contents->GetURL(),
567 tab_contents->encoding(),
568 save_info,
569 tab_contents);
570 }
571
572 void ImageBurnResourceManager::ImageUrlFetched(bool success) {
573 if (active_download_item_) {
574 active_download_item_->RemoveObserver(this);
575 active_download_item_ = NULL;
576 }
577 download_item_observer_added_ = false;
578 if (download_manager_)
579 download_manager_->RemoveObserver(this);
580 if (!success)
581 image_url_fetching_requested_ = false;
582 image_url_fetched_ = success;
583 for (size_t i = 0; i < downloaders_.size(); ++i)
584 downloaders_[i]->CreateImageUrlCallback(image_url_.get());
585 downloaders_.clear();
586 }
587
588 net::FileStream* ImageBurnResourceManager::CreateFileStream(
589 FilePath* file_path) {
590 DCHECK(file_path && !file_path->empty());
591 scoped_ptr<net::FileStream> file_stream(new net::FileStream);
592 if (file_stream->Open(*file_path, base::PLATFORM_FILE_CREATE_ALWAYS |
593 base::PLATFORM_FILE_WRITE)) {
594 return NULL;
595 }
596 return file_stream.release();
597 }
598
599 ////////////////////////////////////////////////////////////////////////////////
600 //
601 // ImageBurnUI
602 //
603 ////////////////////////////////////////////////////////////////////////////////
604 ImageBurnUI::ImageBurnUI(TabContents* contents) : DOMUI(contents) {
605 ImageBurnHandler* handler = new ImageBurnHandler(contents);
606 AddMessageHandler((handler)->Attach(this));
607 ImageBurnUIHTMLSource* html_source = new ImageBurnUIHTMLSource();
608 ChromeThread::PostTask(
609 ChromeThread::IO, FROM_HERE,
610 NewRunnableMethod(
611 Singleton<ChromeURLDataManager>::get(),
612 &ChromeURLDataManager::AddDataSource,
613 make_scoped_refptr(html_source)));
614 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698