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()); |