diff options
author | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-12-10 01:32:21 +0000 |
---|---|---|
committer | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-12-10 01:32:21 +0000 |
commit | 5640b90777c362df2921b12b314cbe50b0016310 (patch) | |
tree | 72531677038b0541f307b05a8b591bd15115fa95 | |
parent | f7b624a6f6c9c08cd098135ce0407807d3677ed0 (diff) | |
download | chromium_src-5640b90777c362df2921b12b314cbe50b0016310.zip chromium_src-5640b90777c362df2921b12b314cbe50b0016310.tar.gz chromium_src-5640b90777c362df2921b12b314cbe50b0016310.tar.bz2 |
Fix a crash in the copy selection code. If there's no
selection, we get a null range, so check for it. Also fallback
if there's no frame with focus to the main frame. The webkit
gtk code does this as well.
Review URL: http://codereview.chromium.org/13297
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@6681 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | webkit/glue/webframe_impl.cc | 3 | ||||
-rw-r--r-- | webkit/tools/test_shell/test_webview_delegate_gtk.cc | 4 |
2 files changed, 7 insertions, 0 deletions
diff --git a/webkit/glue/webframe_impl.cc b/webkit/glue/webframe_impl.cc index a3d003b..bdb43b4 100644 --- a/webkit/glue/webframe_impl.cc +++ b/webkit/glue/webframe_impl.cc @@ -1351,6 +1351,9 @@ void WebFrameImpl::ClearSelection() { std::string WebFrameImpl::GetSelection(bool as_html) { RefPtr<Range> range = frame()->selection()->toRange(); + if (!range.get()) + return std::string(); + if (as_html) { String markup = WebCore::createMarkup(range.get(), 0); return webkit_glue::StringToStdString(markup); diff --git a/webkit/tools/test_shell/test_webview_delegate_gtk.cc b/webkit/tools/test_shell/test_webview_delegate_gtk.cc index 3866e3d..3b0bf82 100644 --- a/webkit/tools/test_shell/test_webview_delegate_gtk.cc +++ b/webkit/tools/test_shell/test_webview_delegate_gtk.cc @@ -47,6 +47,10 @@ void SelectionClipboardGetContents(GtkClipboard* clipboard, WebView* webview = static_cast<WebView*>(data); WebFrame* frame = webview->GetFocusedFrame(); + if (!frame) + frame = webview->GetMainFrame(); + DCHECK(frame); + std::string selection = frame->GetSelection(TEXT_HTML == info); if (TEXT_HTML == info) { gtk_selection_data_set(selection_data, |