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

Unified Diff: chrome/browser/ui/webui/offline/offline_internals_ui_message_handler.cc

Issue 2928243002: Return operation name in prefetch request callback and add internal page hookup (Closed)
Patch Set: Created 3 years, 6 months 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/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());

Powered by Google App Engine
This is Rietveld 408576698