| Index: chrome/browser/ui/webui/offline/offline_internals_ui_message_handler.cc
|
| diff --git a/chrome/browser/ui/webui/offline/offline_internals_ui_message_handler.cc b/chrome/browser/ui/webui/offline/offline_internals_ui_message_handler.cc
|
| index 4d403d8a70ebb9067333f61fec5779fcb5237fb0..ab599f610e7de79597b9d44de88976d6257f346f 100644
|
| --- a/chrome/browser/ui/webui/offline/offline_internals_ui_message_handler.cc
|
| +++ b/chrome/browser/ui/webui/offline/offline_internals_ui_message_handler.cc
|
| @@ -14,29 +14,30 @@
|
| #include "base/guid.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "base/strings/string_number_conversions.h"
|
| +#include "base/strings/string_split.h"
|
| +#include "base/strings/string_util.h"
|
| +#include "base/strings/stringprintf.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/android/offline_pages/offline_page_model_factory.h"
|
| #include "chrome/browser/android/offline_pages/prefetch/prefetch_background_task.h"
|
| #include "chrome/browser/android/offline_pages/request_coordinator_factory.h"
|
| #include "chrome/browser/offline_pages/prefetch/prefetch_service_factory.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/common/channel_info.h"
|
| +#include "chrome/common/chrome_content_client.h"
|
| #include "components/offline_pages/core/client_namespace_constants.h"
|
| #include "components/offline_pages/core/offline_page_feature.h"
|
| +#include "components/offline_pages/core/prefetch/generate_page_bundle_request.h"
|
| +#include "components/offline_pages/core/prefetch/get_operation_request.h"
|
| #include "components/offline_pages/core/prefetch/prefetch_service.h"
|
| #include "content/public/browser/web_ui.h"
|
| #include "net/base/network_change_notifier.h"
|
|
|
| namespace offline_internals {
|
|
|
| -OfflineInternalsUIMessageHandler::OfflineInternalsUIMessageHandler()
|
| - : offline_page_model_(nullptr),
|
| - request_coordinator_(nullptr),
|
| - prefetch_service_(nullptr),
|
| - weak_ptr_factory_(this) {}
|
| -
|
| -OfflineInternalsUIMessageHandler::~OfflineInternalsUIMessageHandler() {}
|
| +namespace {
|
|
|
| -std::string OfflineInternalsUIMessageHandler::GetStringFromDeletePageResult(
|
| +std::string GetStringFromDeletePageResult(
|
| offline_pages::DeletePageResult value) {
|
| switch (value) {
|
| case offline_pages::DeletePageResult::SUCCESS:
|
| @@ -56,7 +57,7 @@ std::string OfflineInternalsUIMessageHandler::GetStringFromDeletePageResult(
|
| return "Unknown";
|
| }
|
|
|
| -std::string OfflineInternalsUIMessageHandler::GetStringFromDeleteRequestResults(
|
| +std::string GetStringFromDeleteRequestResults(
|
| const offline_pages::MultipleItemStatuses& results) {
|
| // If any requests failed, return "failure", else "success".
|
| for (const auto& result : results) {
|
| @@ -67,10 +68,62 @@ std::string OfflineInternalsUIMessageHandler::GetStringFromDeleteRequestResults(
|
| return "Success";
|
| }
|
|
|
| -std::string OfflineInternalsUIMessageHandler::GetStringFromSavePageStatus() {
|
| +std::string GetStringFromSavePageStatus() {
|
| return "Available";
|
| }
|
|
|
| +std::string GetStringFromPrefetchRequestStatus(
|
| + offline_pages::PrefetchRequestStatus status) {
|
| + switch (status) {
|
| + case offline_pages::PrefetchRequestStatus::SUCCESS:
|
| + return "Success";
|
| + case offline_pages::PrefetchRequestStatus::SHOULD_RETRY_WITHOUT_BACKOFF:
|
| + return "Retry w/out backoff";
|
| + case offline_pages::PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF:
|
| + return "Retry w/ backoff";
|
| + case offline_pages::PrefetchRequestStatus::SHOULD_SUSPEND:
|
| + return "Suspend";
|
| + default:
|
| + NOTREACHED();
|
| + return "Unknown";
|
| + }
|
| +}
|
| +
|
| +std::string GetStringRenderPageInfoList(
|
| + const std::vector<offline_pages::RenderPageInfo>& pages) {
|
| + std::string str("[\n");
|
| + bool first = true;
|
| + for (const auto& page : pages) {
|
| + if (first)
|
| + first = false;
|
| + else
|
| + str += ",\n";
|
| + str += base::StringPrintf(
|
| + " {\n"
|
| + " url: \"%s\",\n"
|
| + " redirect_url: \"%s\",\n"
|
| + " status: %d,\n"
|
| + " body_name: \"%s\",\n"
|
| + " body_length: %lld\n"
|
| + " }",
|
| + page.url.c_str(), page.redirect_url.c_str(),
|
| + static_cast<int>(page.status), page.body_name.c_str(),
|
| + static_cast<long long>(page.body_length));
|
| + }
|
| + str += "\n]";
|
| + return str;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +OfflineInternalsUIMessageHandler::OfflineInternalsUIMessageHandler()
|
| + : offline_page_model_(nullptr),
|
| + request_coordinator_(nullptr),
|
| + prefetch_service_(nullptr),
|
| + weak_ptr_factory_(this) {}
|
| +
|
| +OfflineInternalsUIMessageHandler::~OfflineInternalsUIMessageHandler() {}
|
| +
|
| void OfflineInternalsUIMessageHandler::HandleDeleteSelectedPages(
|
| const base::ListValue* args) {
|
| std::string callback_id;
|
| @@ -257,6 +310,55 @@ void OfflineInternalsUIMessageHandler::HandleCancelNwake(
|
| ResolveJavascriptCallback(*callback_id, base::Value("Cancelled."));
|
| }
|
|
|
| +void OfflineInternalsUIMessageHandler::HandleGeneratePageBundle(
|
| + const base::ListValue* args) {
|
| + AllowJavascript();
|
| + std::string callback_id;
|
| + CHECK(args->GetString(0, &callback_id));
|
| +
|
| + std::string data;
|
| + CHECK(args->GetString(1, &data));
|
| + std::vector<std::string> page_urls = base::SplitStringUsingSubstr(
|
| + data, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
|
| +
|
| + generate_page_bundle_request_.reset(
|
| + new offline_pages::GeneratePageBundleRequest(
|
| + GetUserAgent(), "GCM ID", 1000000, page_urls, chrome::GetChannel(),
|
| + Profile::FromWebUI(web_ui())->GetRequestContext(),
|
| + base::Bind(
|
| + &OfflineInternalsUIMessageHandler::HandlePrefetchRequestCallback,
|
| + weak_ptr_factory_.GetWeakPtr(), callback_id)));
|
| +}
|
| +
|
| +void OfflineInternalsUIMessageHandler::HandleGetOperation(
|
| + const base::ListValue* args) {
|
| + AllowJavascript();
|
| + std::string callback_id;
|
| + CHECK(args->GetString(0, &callback_id));
|
| +
|
| + std::string name;
|
| + CHECK(args->GetString(1, &name));
|
| + base::TrimWhitespaceASCII(name, base::TRIM_ALL, &name);
|
| +
|
| + get_operation_request_.reset(new offline_pages::GetOperationRequest(
|
| + name, chrome::GetChannel(),
|
| + Profile::FromWebUI(web_ui())->GetRequestContext(),
|
| + base::Bind(
|
| + &OfflineInternalsUIMessageHandler::HandlePrefetchRequestCallback,
|
| + weak_ptr_factory_.GetWeakPtr(), callback_id)));
|
| +}
|
| +
|
| +void OfflineInternalsUIMessageHandler::HandlePrefetchRequestCallback(
|
| + std::string callback_id,
|
| + offline_pages::PrefetchRequestStatus status,
|
| + const std::string& operation_name,
|
| + const std::vector<offline_pages::RenderPageInfo>& pages) {
|
| + ResolveJavascriptCallback(
|
| + base::Value(callback_id),
|
| + base::Value(GetStringFromPrefetchRequestStatus(status) + "\n" +
|
| + operation_name + "\n" + GetStringRenderPageInfoList(pages)));
|
| +}
|
| +
|
| void OfflineInternalsUIMessageHandler::HandleSetRecordRequestQueue(
|
| const base::ListValue* args) {
|
| AllowJavascript();
|
| @@ -400,6 +502,14 @@ void OfflineInternalsUIMessageHandler::RegisterMessages() {
|
| "cancelNwake",
|
| base::Bind(&OfflineInternalsUIMessageHandler::HandleCancelNwake,
|
| weak_ptr_factory_.GetWeakPtr()));
|
| + web_ui()->RegisterMessageCallback(
|
| + "generatePageBundle",
|
| + base::Bind(&OfflineInternalsUIMessageHandler::HandleGeneratePageBundle,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| + web_ui()->RegisterMessageCallback(
|
| + "getOperation",
|
| + base::Bind(&OfflineInternalsUIMessageHandler::HandleGetOperation,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
|
|
| // Get the offline page model associated with this web ui.
|
| Profile* profile = Profile::FromWebUI(web_ui());
|
|
|