Chromium Code Reviews| 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..e190f9cbcf007904269f84b80d4be8fe92e0852b 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->InternalErrorResponse("History entry not found"); |
|
pfeldman
2013/09/06 13:08:51
InvalidParameter
Vladislav Kaznacheev
2013/09/06 13:50:25
Done.
|
| + } |
| + } |
| + return command->InternalErrorResponse("No WebContents to navigate"); |
| +} |
| + |
| +scoped_refptr<DevToolsProtocol::Response> |
| RendererOverridesHandler::PageCaptureScreenshot( |
| scoped_refptr<DevToolsProtocol::Command> command) { |
| std::string format; |