Index: content/renderer/render_frame_impl.cc |
=================================================================== |
--- content/renderer/render_frame_impl.cc (revision 255719) |
+++ content/renderer/render_frame_impl.cc (working copy) |
@@ -7,6 +7,7 @@ |
#include <map> |
#include <string> |
+#include "base/auto_reset.h" |
#include "base/command_line.h" |
#include "base/debug/alias.h" |
#include "base/debug/dump_without_crashing.h" |
@@ -24,6 +25,7 @@ |
#include "content/child/service_worker/web_service_worker_provider_impl.h" |
#include "content/child/web_socket_stream_handle_impl.h" |
#include "content/common/frame_messages.h" |
+#include "content/common/input_messages.h" |
#include "content/common/service_worker/service_worker_types.h" |
#include "content/common/socket_stream_handle_data.h" |
#include "content/common/swapped_out_messages.h" |
@@ -94,11 +96,13 @@ |
using blink::WebData; |
using blink::WebDataSource; |
using blink::WebDocument; |
+using blink::WebElement; |
using blink::WebFrame; |
using blink::WebHistoryItem; |
using blink::WebHTTPBody; |
using blink::WebNavigationPolicy; |
using blink::WebNavigationType; |
+using blink::WebNode; |
using blink::WebPluginParams; |
using blink::WebReferrerPolicy; |
using blink::WebSearchableFormData; |
@@ -358,10 +362,8 @@ |
return; |
GetRenderWidget()->UpdateTextInputType(); |
- if (render_view_->renderer_accessibility()) { |
- render_view_->renderer_accessibility()->FocusedNodeChanged( |
- blink::WebNode()); |
- } |
+ if (render_view_->renderer_accessibility()) |
+ render_view_->renderer_accessibility()->FocusedNodeChanged(WebNode()); |
} |
void RenderFrameImpl::PepperCaretPositionChanged( |
@@ -542,6 +544,9 @@ |
IPC_MESSAGE_HANDLER(FrameMsg_ContextMenuClosed, OnContextMenuClosed) |
IPC_MESSAGE_HANDLER(FrameMsg_CustomContextMenuAction, |
OnCustomContextMenuAction) |
+ IPC_MESSAGE_HANDLER(InputMsg_Cut, OnCut) |
+ IPC_MESSAGE_HANDLER(InputMsg_Copy, OnCopy) |
+ IPC_MESSAGE_HANDLER(InputMsg_Paste, OnPaste) |
IPC_MESSAGE_HANDLER(FrameMsg_CSSInsertRequest, OnCSSInsertRequest) |
IPC_END_MESSAGE_MAP_EX() |
@@ -841,6 +846,26 @@ |
} |
} |
+void RenderFrameImpl::OnCut() { |
+ base::AutoReset<bool> handling_select_range( |
+ &render_view_->handling_select_range_, true); |
+ frame_->executeCommand(WebString::fromUTF8("Cut"), GetFocusedElement()); |
+} |
+ |
+void RenderFrameImpl::OnCopy() { |
+ base::AutoReset<bool> handling_select_range( |
+ &render_view_->handling_select_range_, true); |
+ WebNode current_node = render_view_->context_menu_node_.isNull() ? |
+ GetFocusedElement() : render_view_->context_menu_node_; |
+ frame_->executeCommand(WebString::fromUTF8("Copy"), current_node); |
+} |
+ |
+void RenderFrameImpl::OnPaste() { |
+ base::AutoReset<bool> handling_select_range( |
+ &render_view_->handling_select_range_, true); |
+ frame_->executeCommand(WebString::fromUTF8("Paste"), GetFocusedElement()); |
+} |
+ |
void RenderFrameImpl::OnCSSInsertRequest(const std::string& css) { |
frame_->document().insertStyleSheet(WebString::fromUTF8(css)); |
} |
@@ -1107,6 +1132,10 @@ |
} |
} |
+void RenderFrameImpl::frameFocused() { |
+ Send(new FrameHostMsg_FrameFocused(routing_id_)); |
+} |
+ |
void RenderFrameImpl::willClose(blink::WebFrame* frame) { |
DCHECK(!frame_ || frame_ == frame); |
// Call back to RenderViewImpl for observers to be notified. |
@@ -2368,6 +2397,14 @@ |
navigation_state->set_transition_type(PAGE_TRANSITION_LINK); |
} |
+WebElement RenderFrameImpl::GetFocusedElement() { |
+ WebDocument doc = frame_->document(); |
+ if (!doc.isNull()) |
+ return doc.focusedElement(); |
+ |
+ return WebElement(); |
+} |
+ |
void RenderFrameImpl::didStartLoading() { |
Send(new FrameHostMsg_DidStartLoading(routing_id_)); |
} |