Support Page.getNavigationHistory and Page.navigateToHistoryEntry in RendererOverridesHandler

BUG=285169

Review URL: https://chromiumcodereview.appspot.com/23943004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@221763 0039d316-1c4b-4281-b951-d872f2087c98
parent db4fc1e2
...@@ -80,6 +80,20 @@ namespace navigate { ...@@ -80,6 +80,20 @@ namespace navigate {
const char kParamUrl[] = "url"; const char kParamUrl[] = "url";
} // navigate } // navigate
namespace getNavigationHistory {
const char kName[] = "Page.getNavigationHistory";
const char kResponseCurrentIndex[] = "currentIndex";
const char kResponseEntries[] = "entries";
const char kResponseEntryId[] = "id";
const char kResponseEntryURL[] = "url";
const char kResponseEntryTitle[] = "title";
} // getNavigationHistory
namespace navigateToHistoryEntry {
const char kName[] = "Page.navigateToHistoryEntry";
const char kParamEntryId[] = "entryId";
} // navigateToHistoryEntry
namespace captureScreenshot { namespace captureScreenshot {
const char kName[] = "Page.captureScreenshot"; const char kName[] = "Page.captureScreenshot";
const char kParamFormat[] = "format"; const char kParamFormat[] = "format";
......
...@@ -89,6 +89,20 @@ namespace Page { ...@@ -89,6 +89,20 @@ namespace Page {
extern const char kParamUrl[]; extern const char kParamUrl[];
} // navigate } // navigate
namespace getNavigationHistory {
extern const char kName[];
extern const char kResponseCurrentIndex[];
extern const char kResponseEntries[];
extern const char kResponseEntryId[];
extern const char kResponseEntryURL[];
extern const char kResponseEntryTitle[];
} // getNavigationHistory
namespace navigateToHistoryEntry {
extern const char kName[];
extern const char kParamEntryId[];
} // navigateToHistoryEntry
namespace captureScreenshot { namespace captureScreenshot {
extern const char kName[]; extern const char kName[];
extern const char kParamFormat[]; extern const char kParamFormat[];
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/javascript_dialog_manager.h" #include "content/public/browser/javascript_dialog_manager.h"
#include "content/public/browser/navigation_controller.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_process_host.h"
#include "content/public/browser/render_view_host.h" #include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/render_widget_host_view.h"
...@@ -95,6 +96,16 @@ RendererOverridesHandler::RendererOverridesHandler(DevToolsAgentHost* agent) ...@@ -95,6 +96,16 @@ RendererOverridesHandler::RendererOverridesHandler(DevToolsAgentHost* agent)
base::Bind( base::Bind(
&RendererOverridesHandler::PageNavigate, &RendererOverridesHandler::PageNavigate,
base::Unretained(this))); 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( RegisterCommandHandler(
devtools::Page::captureScreenshot::kName, devtools::Page::captureScreenshot::kName,
base::Bind( base::Bind(
...@@ -299,6 +310,70 @@ RendererOverridesHandler::PageNavigate( ...@@ -299,6 +310,70 @@ RendererOverridesHandler::PageNavigate(
return command->InternalErrorResponse("No WebContents to navigate"); return command->InternalErrorResponse("No WebContents to navigate");
} }
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> scoped_refptr<DevToolsProtocol::Response>
RendererOverridesHandler::PageCaptureScreenshot( RendererOverridesHandler::PageCaptureScreenshot(
scoped_refptr<DevToolsProtocol::Command> command) { scoped_refptr<DevToolsProtocol::Command> command) {
......
...@@ -53,6 +53,10 @@ class RendererOverridesHandler : public DevToolsProtocol::Handler { ...@@ -53,6 +53,10 @@ class RendererOverridesHandler : public DevToolsProtocol::Handler {
scoped_refptr<DevToolsProtocol::Command> command); scoped_refptr<DevToolsProtocol::Command> command);
scoped_refptr<DevToolsProtocol::Response> PageNavigate( scoped_refptr<DevToolsProtocol::Response> PageNavigate(
scoped_refptr<DevToolsProtocol::Command> command); scoped_refptr<DevToolsProtocol::Command> command);
scoped_refptr<DevToolsProtocol::Response> PageGetNavigationHistory(
scoped_refptr<DevToolsProtocol::Command> command);
scoped_refptr<DevToolsProtocol::Response> PageNavigateToHistoryEntry(
scoped_refptr<DevToolsProtocol::Command> command);
scoped_refptr<DevToolsProtocol::Response> PageCaptureScreenshot( scoped_refptr<DevToolsProtocol::Response> PageCaptureScreenshot(
scoped_refptr<DevToolsProtocol::Command> command); scoped_refptr<DevToolsProtocol::Command> command);
scoped_refptr<DevToolsProtocol::Response> PageStartScreencast( scoped_refptr<DevToolsProtocol::Response> PageStartScreencast(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment