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

Unified Diff: chrome/browser/extensions/extension_save_page_api.cc

Issue 8682013: Moving the MHTML API out of experimental and renaming it. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: One more sync Created 9 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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();
-}
« no previous file with comments | « chrome/browser/extensions/extension_save_page_api.h ('k') | chrome/browser/extensions/extension_save_page_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698