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

Unified Diff: content/browser/devtools/renderer_overrides_handler.cc

Issue 23943004: Support Page.getNavigationHistory and Page.navigateToHistoryEntry in RendererOverridesHandler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments Created 7 years, 3 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
« no previous file with comments | « content/browser/devtools/renderer_overrides_handler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/devtools/renderer_overrides_handler.cc
diff --git a/content/browser/devtools/renderer_overrides_handler.cc b/content/browser/devtools/renderer_overrides_handler.cc
index f3970385490f42d0e89544b3327153de684e05e6..c0574d828491f864817a2c79987e590752d564cc 100644
--- a/content/browser/devtools/renderer_overrides_handler.cc
+++ b/content/browser/devtools/renderer_overrides_handler.cc
@@ -24,6 +24,7 @@
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/javascript_dialog_manager.h"
#include "content/public/browser/navigation_controller.h"
+#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host_view.h"
@@ -96,6 +97,16 @@ RendererOverridesHandler::RendererOverridesHandler(DevToolsAgentHost* agent)
&RendererOverridesHandler::PageNavigate,
base::Unretained(this)));
RegisterCommandHandler(
+ devtools::Page::getNavigationHistory::kName,
+ base::Bind(
+ &RendererOverridesHandler::PageGetNavigationHistory,
+ base::Unretained(this)));
+ RegisterCommandHandler(
+ devtools::Page::navigateToHistoryEntry::kName,
+ base::Bind(
+ &RendererOverridesHandler::PageNavigateToHistoryEntry,
+ base::Unretained(this)));
+ RegisterCommandHandler(
devtools::Page::captureScreenshot::kName,
base::Bind(
&RendererOverridesHandler::PageCaptureScreenshot,
@@ -300,6 +311,70 @@ RendererOverridesHandler::PageNavigate(
}
scoped_refptr<DevToolsProtocol::Response>
+RendererOverridesHandler::PageGetNavigationHistory(
+ scoped_refptr<DevToolsProtocol::Command> command) {
+ RenderViewHost* host = agent_->GetRenderViewHost();
+ if (host) {
+ WebContents* web_contents = host->GetDelegate()->GetAsWebContents();
+ if (web_contents) {
+ base::DictionaryValue* result = new base::DictionaryValue();
+ NavigationController& controller = web_contents->GetController();
+ result->SetInteger(
+ devtools::Page::getNavigationHistory::kResponseCurrentIndex,
+ controller.GetCurrentEntryIndex());
+ ListValue* entries = new ListValue();
+ for (int i = 0; i != controller.GetEntryCount(); ++i) {
+ const NavigationEntry* entry = controller.GetEntryAtIndex(i);
+ base::DictionaryValue* entry_value = new base::DictionaryValue();
+ entry_value->SetInteger(
+ devtools::Page::getNavigationHistory::kResponseEntryId,
+ entry->GetUniqueID());
+ entry_value->SetString(
+ devtools::Page::getNavigationHistory::kResponseEntryURL,
+ entry->GetURL().spec());
+ entry_value->SetString(
+ devtools::Page::getNavigationHistory::kResponseEntryTitle,
+ entry->GetTitle());
+ entries->Append(entry_value);
+ }
+ result->Set(
+ devtools::Page::getNavigationHistory::kResponseEntries,
+ entries);
+ return command->SuccessResponse(result);
+ }
+ }
+ return command->InternalErrorResponse("No WebContents to navigate");
+}
+
+scoped_refptr<DevToolsProtocol::Response>
+RendererOverridesHandler::PageNavigateToHistoryEntry(
+ scoped_refptr<DevToolsProtocol::Command> command) {
+ int entry_id;
+
+ base::DictionaryValue* params = command->params();
+ const char* param = devtools::Page::navigateToHistoryEntry::kParamEntryId;
+ if (!params || !params->GetInteger(param, &entry_id)) {
+ return command->InvalidParamResponse(param);
+ }
+
+ RenderViewHost* host = agent_->GetRenderViewHost();
+ if (host) {
+ WebContents* web_contents = host->GetDelegate()->GetAsWebContents();
+ if (web_contents) {
+ NavigationController& controller = web_contents->GetController();
+ for (int i = 0; i != controller.GetEntryCount(); ++i) {
+ if (controller.GetEntryAtIndex(i)->GetUniqueID() == entry_id) {
+ controller.GoToIndex(i);
+ return command->SuccessResponse(new base::DictionaryValue());
+ }
+ }
+ return command->InvalidParamResponse(param);
+ }
+ }
+ return command->InternalErrorResponse("No WebContents to navigate");
+}
+
+scoped_refptr<DevToolsProtocol::Response>
RendererOverridesHandler::PageCaptureScreenshot(
scoped_refptr<DevToolsProtocol::Command> command) {
std::string format;
« no previous file with comments | « content/browser/devtools/renderer_overrides_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698