diff options
author | michaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-29 23:00:00 +0000 |
---|---|---|
committer | michaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-29 23:00:00 +0000 |
commit | a5230508efeea42e05005f43f9ffa140fbcc64c0 (patch) | |
tree | 89b4aedc784c9b0b1c93b757b35631e0fd06a884 /chrome/browser/extensions/extension_page_capture_api.cc | |
parent | 55df9099f9350d906d7b03a4390687ac95269210 (diff) | |
download | chromium_src-a5230508efeea42e05005f43f9ffa140fbcc64c0.zip chromium_src-a5230508efeea42e05005f43f9ffa140fbcc64c0.tar.gz chromium_src-a5230508efeea42e05005f43f9ffa140fbcc64c0.tar.bz2 |
Modify DeletableFileReference to not necessarily delete after all. Renamed the class to ShareableFileReference and fixed up the current callers with the new name and gypi files.
BUG=115603
Review URL: https://chromiumcodereview.appspot.com/9466025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@124276 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_page_capture_api.cc')
-rw-r--r-- | chrome/browser/extensions/extension_page_capture_api.cc | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/chrome/browser/extensions/extension_page_capture_api.cc b/chrome/browser/extensions/extension_page_capture_api.cc index 52cbc59..77c1b4f 100644 --- a/chrome/browser/extensions/extension_page_capture_api.cc +++ b/chrome/browser/extensions/extension_page_capture_api.cc @@ -22,6 +22,7 @@ using content::BrowserThread; using content::ChildProcessSecurityPolicy; using content::WebContents; +using webkit_blob::ShareableFileReference; // Error messages. const char* const kFileTooBigError = "The MHTML file generated is too big."; @@ -37,6 +38,10 @@ PageCaptureSaveAsMHTMLFunction::PageCaptureSaveAsMHTMLFunction() : tab_id_(0) { } PageCaptureSaveAsMHTMLFunction::~PageCaptureSaveAsMHTMLFunction() { + if (mhtml_file_.get()) { + BrowserThread::ReleaseSoon(BrowserThread::IO, FROM_HERE, + mhtml_file_.release()); + } } void PageCaptureSaveAsMHTMLFunction::SetTestDelegate(TestDelegate* delegate) { @@ -86,12 +91,28 @@ void PageCaptureSaveAsMHTMLFunction::CreateTemporaryFile() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); bool success = file_util::CreateTemporaryFile(&mhtml_path_); BrowserThread::PostTask( - BrowserThread::UI, FROM_HERE, + BrowserThread::IO, FROM_HERE, base::Bind(&PageCaptureSaveAsMHTMLFunction::TemporaryFileCreated, this, success)); } void PageCaptureSaveAsMHTMLFunction::TemporaryFileCreated(bool success) { + if (BrowserThread::CurrentlyOn(BrowserThread::IO)) { + if (success) { + // Setup a ShareableFileReference so the temporary file gets deleted + // once it is no longer used. + mhtml_file_ = ShareableFileReference::GetOrCreate( + mhtml_path_, ShareableFileReference::DELETE_ON_FINAL_RELEASE, + BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); + } + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, + base::Bind(&PageCaptureSaveAsMHTMLFunction::TemporaryFileCreated, this, + success)); + return; + } + + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); if (!success) { ReturnFailure(kTemporaryFileError); return; @@ -100,11 +121,6 @@ void PageCaptureSaveAsMHTMLFunction::TemporaryFileCreated(bool success) { if (test_delegate_) test_delegate_->OnTemporaryFileCreated(mhtml_path_); - // Sets a DeletableFileReference so the temporary file gets deleted once it is - // no longer used. - mhtml_file_ = webkit_blob::DeletableFileReference::GetOrCreate(mhtml_path_, - BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); - WebContents* web_contents = GetWebContents(); if (!web_contents) { ReturnFailure(kTabClosedError); |