Chromium Code Reviews| 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 ae691217f4557fcf20f63a2294ee4afadabbad5c..ca2c4c8dc09a047260bdd41a15d7191f41213f38 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 |
| @@ -13,25 +13,25 @@ |
| #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/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/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 "content/public/browser/web_ui.h" |
| +#include "components/offline_pages/core/prefetch/generate_page_bundle_request.h" |
| +#include "components/offline_pages/core/prefetch/get_operation_request.h" |
| #include "net/base/network_change_notifier.h" |
| namespace offline_internals { |
| -OfflineInternalsUIMessageHandler::OfflineInternalsUIMessageHandler() |
| - : offline_page_model_(nullptr), |
| - request_coordinator_(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: |
| @@ -51,7 +51,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) { |
| @@ -62,10 +62,55 @@ 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( |
|
dewittj
2017/06/12 18:31:04
Is it possible to just use text_format.h?
https:/
jianli
2017/06/12 22:40:30
We can't and don't want to use it because:
* text_
|
| + const std::vector<offline_pages::RenderPageInfo>& pages) { |
| + std::string str("["); |
| + bool first = true; |
| + for (const auto& page : pages) { |
| + if (first) |
| + first = false; |
| + else |
| + str += " ,"; |
| + str += "{url:\""; |
| + str += page.url; |
| + str += "\", status:"; |
| + str += base::IntToString(static_cast<int>(page.status)); |
| + str += "}"; |
| + } |
| + str += "]"; |
| + return str; |
| +} |
| + |
| +} // namespace |
| + |
| +OfflineInternalsUIMessageHandler::OfflineInternalsUIMessageHandler() |
| + : offline_page_model_(nullptr), |
| + request_coordinator_(nullptr), |
| + weak_ptr_factory_(this) {} |
| + |
| +OfflineInternalsUIMessageHandler::~OfflineInternalsUIMessageHandler() {} |
| + |
| void OfflineInternalsUIMessageHandler::HandleDeleteSelectedPages( |
| const base::ListValue* args) { |
| std::string callback_id; |
| @@ -252,6 +297,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) + " " + |
| + operation_name + " " + GetStringRenderPageInfoList(pages))); |
| +} |
| + |
| void OfflineInternalsUIMessageHandler::HandleSetRecordRequestQueue( |
| const base::ListValue* args) { |
| AllowJavascript(); |
| @@ -374,6 +468,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()); |