Index: chrome/browser/extensions/extension_save_page_api.cc |
diff --git a/chrome/browser/extensions/extension_save_page_api.cc b/chrome/browser/extensions/extension_save_page_api.cc |
deleted file mode 100644 |
index 6a8bde65aa79de6619f89e8231c4f904e5b82584..0000000000000000000000000000000000000000 |
--- a/chrome/browser/extensions/extension_save_page_api.cc |
+++ /dev/null |
@@ -1,176 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/extensions/extension_save_page_api.h" |
- |
-#include "base/bind.h" |
-#include "base/file_util.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/extensions/extension_tab_util.h" |
-#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
-#include "chrome/common/extensions/extension_messages.h" |
-#include "content/browser/child_process_security_policy.h" |
-#include "content/browser/renderer_host/render_view_host.h" |
-#include "content/browser/tab_contents/tab_contents.h" |
-#include "content/browser/download/mhtml_generation_manager.h" |
-#include "content/public/browser/notification_details.h" |
-#include "content/public/browser/notification_source.h" |
-#include "content/public/browser/notification_types.h" |
- |
-using content::BrowserThread; |
- |
-// Error messages. |
-const char* const kFileTooBigError = "The MHTML file generated is too big."; |
-const char* const kMHTMLGenerationFailedError = "Failed to generate MHTML."; |
-const char* const kSizeRetrievalError = |
- "Failed to retrieve size of generated MHTML."; |
-const char* const kTemporaryFileError = "Failed to create a temporary file."; |
-const char* const kTabClosedError = "Cannot find the tab for thie request."; |
- |
-static SavePageAsMHTMLFunction::TestDelegate* test_delegate_ = NULL; |
- |
-SavePageAsMHTMLFunction::SavePageAsMHTMLFunction() : tab_id_(0) { |
-} |
- |
-SavePageAsMHTMLFunction::~SavePageAsMHTMLFunction() { |
-} |
- |
-void SavePageAsMHTMLFunction::SetTestDelegate(TestDelegate* delegate) { |
- test_delegate_ = delegate; |
-} |
- |
-bool SavePageAsMHTMLFunction::RunImpl() { |
- DictionaryValue* args; |
- EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); |
- |
- if (!args->HasKey("tabId")) |
- return false; |
- |
- EXTENSION_FUNCTION_VALIDATE(args->GetInteger("tabId", &tab_id_)); |
- |
- AddRef(); // Balanced in ReturnFailure/ReturnSuccess() |
- |
- BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
- NewRunnableMethod(this, &SavePageAsMHTMLFunction::CreateTemporaryFile)); |
- return true; |
-} |
- |
-bool SavePageAsMHTMLFunction::OnMessageReceivedFromRenderView( |
- const IPC::Message& message) { |
- if (message.type() != ExtensionHostMsg_ResponseAck::ID) |
- return false; |
- |
- int message_request_id; |
- void* iter = NULL; |
- if (!message.ReadInt(&iter, &message_request_id)) { |
- NOTREACHED() << "malformed extension message"; |
- return true; |
- } |
- |
- if (message_request_id != request_id()) |
- return false; |
- |
- // The extension process has processed the response and has created a |
- // reference to the blob, it is safe for us to go away. |
- Release(); // Balanced in Run() |
- |
- return true; |
-} |
- |
-void SavePageAsMHTMLFunction::CreateTemporaryFile() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- bool success = file_util::CreateTemporaryFile(&mhtml_path_); |
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
- NewRunnableMethod(this, &SavePageAsMHTMLFunction::TemporaryFileCreated, |
- success)); |
-} |
- |
-void SavePageAsMHTMLFunction::TemporaryFileCreated(bool success) { |
- if (!success) { |
- ReturnFailure(kTemporaryFileError); |
- return; |
- } |
- |
- 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)); |
- |
- TabContents* tab_contents = GetTabContents(); |
- if (!tab_contents) { |
- ReturnFailure(kTabClosedError); |
- return; |
- } |
- |
- MHTMLGenerationManager::GenerateMHTMLCallback callback = |
- base::Bind(&SavePageAsMHTMLFunction::MHTMLGenerated, this); |
- |
- g_browser_process->mhtml_generation_manager()->GenerateMHTML( |
- tab_contents, mhtml_path_, callback); |
-} |
- |
-void SavePageAsMHTMLFunction::MHTMLGenerated(const FilePath& file_path, |
- int64 mhtml_file_size) { |
- DCHECK(mhtml_path_ == file_path); |
- if (mhtml_file_size <= 0) { |
- ReturnFailure(kMHTMLGenerationFailedError); |
- return; |
- } |
- |
- if (mhtml_file_size > std::numeric_limits<int>::max()) { |
- ReturnFailure(kFileTooBigError); |
- return; |
- } |
- |
- ReturnSuccess(mhtml_file_size); |
-} |
- |
-void SavePageAsMHTMLFunction::ReturnFailure(const std::string& error) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- |
- error_ = error; |
- |
- SendResponse(false); |
- |
- Release(); // Balanced in Run() |
-} |
- |
-void SavePageAsMHTMLFunction::ReturnSuccess(int64 file_size) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- |
- TabContents* tab_contents = GetTabContents(); |
- if (!tab_contents || !render_view_host()) { |
- ReturnFailure(kTabClosedError); |
- return; |
- } |
- |
- int child_id = render_view_host()->process()->GetID(); |
- ChildProcessSecurityPolicy::GetInstance()->GrantReadFile( |
- child_id, mhtml_path_); |
- |
- DictionaryValue* dict = new DictionaryValue(); |
- result_.reset(dict); |
- dict->SetString("mhtmlFilePath", mhtml_path_.value()); |
- dict->SetInteger("mhtmlFileLength", file_size); |
- |
- SendResponse(true); |
- |
- // Note that we'll wait for a response ack message received in |
- // OnMessageReceivedFromRenderView before we call Release() (to prevent the |
- // blob file from being deleted). |
-} |
- |
-TabContents* SavePageAsMHTMLFunction::GetTabContents() { |
- Browser* browser = NULL; |
- TabContentsWrapper* tab_contents_wrapper = NULL; |
- |
- if (!ExtensionTabUtil::GetTabById(tab_id_, profile(), include_incognito(), |
- &browser, NULL, &tab_contents_wrapper, NULL)) { |
- return NULL; |
- } |
- return tab_contents_wrapper->tab_contents(); |
-} |