Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 239 static int g_frame_count = 0; | 239 static int g_frame_count = 0; |
| 240 | 240 |
| 241 static HeapVector<ScriptSourceCode> CreateSourcesVector( | 241 static HeapVector<ScriptSourceCode> CreateSourcesVector( |
| 242 const WebScriptSource* sources_in, | 242 const WebScriptSource* sources_in, |
| 243 unsigned num_sources) { | 243 unsigned num_sources) { |
| 244 HeapVector<ScriptSourceCode> sources; | 244 HeapVector<ScriptSourceCode> sources; |
| 245 sources.Append(sources_in, num_sources); | 245 sources.Append(sources_in, num_sources); |
| 246 return sources; | 246 return sources; |
| 247 } | 247 } |
| 248 | 248 |
| 249 WebPluginContainerBase* WebLocalFrameImpl::PluginContainerFromFrame( | |
| 250 LocalFrame* frame) { | |
| 251 if (!frame) | |
| 252 return 0; | |
| 253 if (!frame->GetDocument() || !frame->GetDocument()->IsPluginDocument()) | |
| 254 return 0; | |
| 255 PluginDocument* plugin_document = ToPluginDocument(frame->GetDocument()); | |
| 256 return ToWebPluginContainerBase(plugin_document->GetPluginView()); | |
| 257 } | |
| 258 | |
| 259 WebPluginContainerBase* WebLocalFrameImpl::CurrentPluginContainer( | |
| 260 LocalFrame* frame, | |
| 261 Node* node) { | |
| 262 WebPluginContainerBase* plugin_container = PluginContainerFromFrame(frame); | |
| 263 if (plugin_container) | |
| 264 return plugin_container; | |
| 265 | |
| 266 if (!node) { | |
| 267 DCHECK(frame->GetDocument()); | |
| 268 node = frame->GetDocument()->FocusedElement(); | |
| 269 } | |
| 270 return ToWebPluginContainerBase(WebNode::PluginContainerFromNode(node)); | |
| 271 } | |
| 272 | |
| 273 // Simple class to override some of PrintContext behavior. Some of the methods | 249 // Simple class to override some of PrintContext behavior. Some of the methods |
| 274 // made virtual so that they can be overridden by ChromePluginPrintContext. | 250 // made virtual so that they can be overridden by ChromePluginPrintContext. |
| 275 class ChromePrintContext : public PrintContext { | 251 class ChromePrintContext : public PrintContext { |
| 276 WTF_MAKE_NONCOPYABLE(ChromePrintContext); | 252 WTF_MAKE_NONCOPYABLE(ChromePrintContext); |
| 277 | 253 |
| 278 public: | 254 public: |
| 279 explicit ChromePrintContext(LocalFrame* frame) | 255 explicit ChromePrintContext(LocalFrame* frame) |
| 280 : PrintContext(frame), printed_page_width_(0) {} | 256 : PrintContext(frame), printed_page_width_(0) {} |
| 281 | 257 |
| 282 ~ChromePrintContext() override {} | 258 ~ChromePrintContext() override {} |
| (...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1093 } | 1069 } |
| 1094 | 1070 |
| 1095 bool WebLocalFrameImpl::IsSpellCheckingEnabled() const { | 1071 bool WebLocalFrameImpl::IsSpellCheckingEnabled() const { |
| 1096 return GetFrame()->GetSpellChecker().IsSpellCheckingEnabled(); | 1072 return GetFrame()->GetSpellChecker().IsSpellCheckingEnabled(); |
| 1097 } | 1073 } |
| 1098 | 1074 |
| 1099 void WebLocalFrameImpl::ReplaceMisspelledRange(const WebString& text) { | 1075 void WebLocalFrameImpl::ReplaceMisspelledRange(const WebString& text) { |
| 1100 // If this caret selection has two or more markers, this function replace the | 1076 // If this caret selection has two or more markers, this function replace the |
| 1101 // range covered by the first marker with the specified word as Microsoft Word | 1077 // range covered by the first marker with the specified word as Microsoft Word |
| 1102 // does. | 1078 // does. |
| 1103 if (PluginContainerFromFrame(GetFrame())) | 1079 if (CurrentPluginContainer(GetFrame())) |
| 1104 return; | 1080 return; |
| 1105 | 1081 |
| 1106 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets | 1082 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets |
| 1107 // needs to be audited. see http://crbug.com/590369 for more details. | 1083 // needs to be audited. see http://crbug.com/590369 for more details. |
| 1108 GetFrame()->GetDocument()->UpdateStyleAndLayoutIgnorePendingStylesheets(); | 1084 GetFrame()->GetDocument()->UpdateStyleAndLayoutIgnorePendingStylesheets(); |
| 1109 | 1085 |
| 1110 GetFrame()->GetSpellChecker().ReplaceMisspelledRange(text); | 1086 GetFrame()->GetSpellChecker().ReplaceMisspelledRange(text); |
| 1111 } | 1087 } |
| 1112 | 1088 |
| 1113 void WebLocalFrameImpl::RemoveSpellingMarkers() { | 1089 void WebLocalFrameImpl::RemoveSpellingMarkers() { |
| 1114 GetFrame()->GetSpellChecker().RemoveSpellingMarkers(); | 1090 GetFrame()->GetSpellChecker().RemoveSpellingMarkers(); |
| 1115 } | 1091 } |
| 1116 | 1092 |
| 1117 void WebLocalFrameImpl::RemoveSpellingMarkersUnderWords( | 1093 void WebLocalFrameImpl::RemoveSpellingMarkersUnderWords( |
| 1118 const WebVector<WebString>& words) { | 1094 const WebVector<WebString>& words) { |
| 1119 Vector<String> converted_words; | 1095 Vector<String> converted_words; |
| 1120 converted_words.Append(words.Data(), words.size()); | 1096 converted_words.Append(words.Data(), words.size()); |
| 1121 GetFrame()->RemoveSpellingMarkersUnderWords(converted_words); | 1097 GetFrame()->RemoveSpellingMarkersUnderWords(converted_words); |
| 1122 } | 1098 } |
| 1123 | 1099 |
| 1124 bool WebLocalFrameImpl::HasSelection() const { | 1100 bool WebLocalFrameImpl::HasSelection() const { |
| 1125 WebPluginContainerBase* plugin_container = | 1101 WebPluginContainerBase* plugin_container = CurrentPluginContainer(GetFrame()); |
| 1126 PluginContainerFromFrame(GetFrame()); | |
| 1127 if (plugin_container) | 1102 if (plugin_container) |
| 1128 return plugin_container->Plugin()->HasSelection(); | 1103 return plugin_container->Plugin()->HasSelection(); |
| 1129 | 1104 |
| 1130 // frame()->selection()->isNone() never returns true. | 1105 // frame()->selection()->isNone() never returns true. |
| 1131 return GetFrame() | 1106 return GetFrame() |
| 1132 ->Selection() | 1107 ->Selection() |
| 1133 .ComputeVisibleSelectionInDOMTreeDeprecated() | 1108 .ComputeVisibleSelectionInDOMTreeDeprecated() |
| 1134 .Start() != GetFrame() | 1109 .Start() != GetFrame() |
| 1135 ->Selection() | 1110 ->Selection() |
| 1136 .ComputeVisibleSelectionInDOMTreeDeprecated() | 1111 .ComputeVisibleSelectionInDOMTreeDeprecated() |
| 1137 .end(); | 1112 .end(); |
| 1138 } | 1113 } |
| 1139 | 1114 |
| 1140 WebRange WebLocalFrameImpl::SelectionRange() const { | 1115 WebRange WebLocalFrameImpl::SelectionRange() const { |
| 1141 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets | 1116 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets |
| 1142 // needs to be audited. See http://crbug.com/590369 for more details. | 1117 // needs to be audited. See http://crbug.com/590369 for more details. |
| 1143 GetFrame()->GetDocument()->UpdateStyleAndLayoutIgnorePendingStylesheets(); | 1118 GetFrame()->GetDocument()->UpdateStyleAndLayoutIgnorePendingStylesheets(); |
| 1144 | 1119 |
| 1145 return GetFrame() | 1120 return GetFrame() |
| 1146 ->Selection() | 1121 ->Selection() |
| 1147 .ComputeVisibleSelectionInDOMTreeDeprecated() | 1122 .ComputeVisibleSelectionInDOMTreeDeprecated() |
| 1148 .ToNormalizedEphemeralRange(); | 1123 .ToNormalizedEphemeralRange(); |
| 1149 } | 1124 } |
| 1150 | 1125 |
| 1151 WebString WebLocalFrameImpl::SelectionAsText() const { | 1126 WebString WebLocalFrameImpl::SelectionAsText() const { |
| 1152 WebPluginContainerBase* plugin_container = | 1127 WebPluginContainerBase* plugin_container = CurrentPluginContainer(GetFrame()); |
| 1153 PluginContainerFromFrame(GetFrame()); | |
| 1154 if (plugin_container) | 1128 if (plugin_container) |
| 1155 return plugin_container->Plugin()->SelectionAsText(); | 1129 return plugin_container->Plugin()->SelectionAsText(); |
| 1156 | 1130 |
| 1157 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets | 1131 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets |
| 1158 // needs to be audited. See http://crbug.com/590369 for more details. | 1132 // needs to be audited. See http://crbug.com/590369 for more details. |
| 1159 GetFrame()->GetDocument()->UpdateStyleAndLayoutIgnorePendingStylesheets(); | 1133 GetFrame()->GetDocument()->UpdateStyleAndLayoutIgnorePendingStylesheets(); |
| 1160 | 1134 |
| 1161 String text = GetFrame()->Selection().SelectedText( | 1135 String text = GetFrame()->Selection().SelectedText( |
| 1162 TextIteratorBehavior::EmitsObjectReplacementCharacterBehavior()); | 1136 TextIteratorBehavior::EmitsObjectReplacementCharacterBehavior()); |
| 1163 #if OS(WIN) | 1137 #if OS(WIN) |
| 1164 ReplaceNewlinesWithWindowsStyleNewlines(text); | 1138 ReplaceNewlinesWithWindowsStyleNewlines(text); |
| 1165 #endif | 1139 #endif |
| 1166 ReplaceNBSPWithSpace(text); | 1140 ReplaceNBSPWithSpace(text); |
| 1167 return text; | 1141 return text; |
| 1168 } | 1142 } |
| 1169 | 1143 |
| 1170 WebString WebLocalFrameImpl::SelectionAsMarkup() const { | 1144 WebString WebLocalFrameImpl::SelectionAsMarkup() const { |
| 1171 WebPluginContainerBase* plugin_container = | 1145 WebPluginContainerBase* plugin_container = CurrentPluginContainer(GetFrame()); |
| 1172 PluginContainerFromFrame(GetFrame()); | |
| 1173 if (plugin_container) | 1146 if (plugin_container) |
| 1174 return plugin_container->Plugin()->SelectionAsMarkup(); | 1147 return plugin_container->Plugin()->SelectionAsMarkup(); |
| 1175 | 1148 |
| 1176 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets | 1149 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets |
| 1177 // needs to be audited. See http://crbug.com/590369 for more details. | 1150 // needs to be audited. See http://crbug.com/590369 for more details. |
| 1178 // Selection normalization and markup generation require clean layout. | 1151 // Selection normalization and markup generation require clean layout. |
| 1179 GetFrame()->GetDocument()->UpdateStyleAndLayoutIgnorePendingStylesheets(); | 1152 GetFrame()->GetDocument()->UpdateStyleAndLayoutIgnorePendingStylesheets(); |
| 1180 | 1153 |
| 1181 return GetFrame()->Selection().SelectedHTMLForClipboard(); | 1154 return GetFrame()->Selection().SelectedHTMLForClipboard(); |
| 1182 } | 1155 } |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1374 GetFrame()->Selection().SetCaretVisible(visible); | 1347 GetFrame()->Selection().SetCaretVisible(visible); |
| 1375 } | 1348 } |
| 1376 | 1349 |
| 1377 VisiblePosition WebLocalFrameImpl::VisiblePositionForViewportPoint( | 1350 VisiblePosition WebLocalFrameImpl::VisiblePositionForViewportPoint( |
| 1378 const WebPoint& point_in_viewport) { | 1351 const WebPoint& point_in_viewport) { |
| 1379 return VisiblePositionForContentsPoint( | 1352 return VisiblePositionForContentsPoint( |
| 1380 GetFrame()->View()->ViewportToContents(point_in_viewport), GetFrame()); | 1353 GetFrame()->View()->ViewportToContents(point_in_viewport), GetFrame()); |
| 1381 } | 1354 } |
| 1382 | 1355 |
| 1383 WebPlugin* WebLocalFrameImpl::FocusedPluginIfInputMethodSupported() { | 1356 WebPlugin* WebLocalFrameImpl::FocusedPluginIfInputMethodSupported() { |
| 1384 WebPluginContainerBase* container = | 1357 WebPluginContainerBase* container = CurrentPluginContainer(GetFrame()); |
| 1385 WebLocalFrameImpl::CurrentPluginContainer(GetFrame()); | |
| 1386 if (container && container->SupportsInputMethod()) | 1358 if (container && container->SupportsInputMethod()) |
| 1387 return container->Plugin(); | 1359 return container->Plugin(); |
| 1388 return 0; | 1360 return 0; |
| 1389 } | 1361 } |
| 1390 | 1362 |
| 1391 int WebLocalFrameImpl::PrintBegin(const WebPrintParams& print_params, | 1363 int WebLocalFrameImpl::PrintBegin(const WebPrintParams& print_params, |
| 1392 const WebNode& constrain_to_node) { | 1364 const WebNode& constrain_to_node) { |
| 1393 DCHECK(!GetFrame()->GetDocument()->IsFrameSet()); | 1365 DCHECK(!GetFrame()->GetDocument()->IsFrameSet()); |
| 1394 WebPluginContainerBase* plugin_container = nullptr; | 1366 WebPluginContainerBase* plugin_container = nullptr; |
| 1395 if (constrain_to_node.IsNull()) { | 1367 if (constrain_to_node.IsNull()) { |
| 1396 // If this is a plugin document, check if the plugin supports its own | 1368 // If this is a plugin document, check if the plugin supports its own |
| 1397 // printing. If it does, we will delegate all printing to that. | 1369 // printing. If it does, we will delegate all printing to that. |
| 1398 plugin_container = PluginContainerFromFrame(GetFrame()); | 1370 plugin_container = CurrentPluginContainer(GetFrame()); |
| 1399 } else { | 1371 } else { |
| 1400 // We only support printing plugin nodes for now. | 1372 // We only support printing plugin nodes for now. |
| 1401 plugin_container = | 1373 plugin_container = |
| 1402 ToWebPluginContainerBase(constrain_to_node.PluginContainer()); | 1374 ToWebPluginContainerBase(constrain_to_node.PluginContainer()); |
| 1403 } | 1375 } |
| 1404 | 1376 |
| 1405 if (plugin_container && plugin_container->SupportsPaginatedPrint()) { | 1377 if (plugin_container && plugin_container->SupportsPaginatedPrint()) { |
| 1406 print_context_ = new ChromePluginPrintContext(GetFrame(), plugin_container, | 1378 print_context_ = new ChromePluginPrintContext(GetFrame(), plugin_container, |
| 1407 print_params); | 1379 print_params); |
| 1408 } else { | 1380 } else { |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 1434 } | 1406 } |
| 1435 | 1407 |
| 1436 void WebLocalFrameImpl::PrintEnd() { | 1408 void WebLocalFrameImpl::PrintEnd() { |
| 1437 DCHECK(print_context_); | 1409 DCHECK(print_context_); |
| 1438 print_context_->EndPrintMode(); | 1410 print_context_->EndPrintMode(); |
| 1439 print_context_.Clear(); | 1411 print_context_.Clear(); |
| 1440 } | 1412 } |
| 1441 | 1413 |
| 1442 bool WebLocalFrameImpl::IsPrintScalingDisabledForPlugin(const WebNode& node) { | 1414 bool WebLocalFrameImpl::IsPrintScalingDisabledForPlugin(const WebNode& node) { |
| 1443 WebPluginContainerBase* plugin_container = | 1415 WebPluginContainerBase* plugin_container = |
| 1444 node.IsNull() ? PluginContainerFromFrame(GetFrame()) | 1416 node.IsNull() ? CurrentPluginContainer(GetFrame()) |
| 1445 : ToWebPluginContainerBase(node.PluginContainer()); | 1417 : ToWebPluginContainerBase(node.PluginContainer()); |
| 1446 | 1418 |
| 1447 if (!plugin_container || !plugin_container->SupportsPaginatedPrint()) | 1419 if (!plugin_container || !plugin_container->SupportsPaginatedPrint()) |
| 1448 return false; | 1420 return false; |
| 1449 | 1421 |
| 1450 return plugin_container->IsPrintScalingDisabled(); | 1422 return plugin_container->IsPrintScalingDisabled(); |
| 1451 } | 1423 } |
| 1452 | 1424 |
| 1453 bool WebLocalFrameImpl::GetPrintPresetOptionsForPlugin( | 1425 bool WebLocalFrameImpl::GetPrintPresetOptionsForPlugin( |
| 1454 const WebNode& node, | 1426 const WebNode& node, |
| 1455 WebPrintPresetOptions* preset_options) { | 1427 WebPrintPresetOptions* preset_options) { |
| 1456 WebPluginContainerBase* plugin_container = | 1428 WebPluginContainerBase* plugin_container = |
| 1457 node.IsNull() ? PluginContainerFromFrame(GetFrame()) | 1429 node.IsNull() ? CurrentPluginContainer(GetFrame()) |
| 1458 : ToWebPluginContainerBase(node.PluginContainer()); | 1430 : ToWebPluginContainerBase(node.PluginContainer()); |
| 1459 | 1431 |
| 1460 if (!plugin_container || !plugin_container->SupportsPaginatedPrint()) | 1432 if (!plugin_container || !plugin_container->SupportsPaginatedPrint()) |
| 1461 return false; | 1433 return false; |
| 1462 | 1434 |
| 1463 return plugin_container->GetPrintPresetOptionsFromDocument(preset_options); | 1435 return plugin_container->GetPrintPresetOptionsFromDocument(preset_options); |
| 1464 } | 1436 } |
| 1465 | 1437 |
| 1466 bool WebLocalFrameImpl::HasCustomPageSizeStyle(int page_index) { | 1438 bool WebLocalFrameImpl::HasCustomPageSizeStyle(int page_index) { |
| 1467 return GetFrame() | 1439 return GetFrame() |
| (...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1908 | 1880 |
| 1909 void WebLocalFrameImpl::DidFail(const ResourceError& error, | 1881 void WebLocalFrameImpl::DidFail(const ResourceError& error, |
| 1910 bool was_provisional, | 1882 bool was_provisional, |
| 1911 HistoryCommitType commit_type) { | 1883 HistoryCommitType commit_type) { |
| 1912 if (!Client()) | 1884 if (!Client()) |
| 1913 return; | 1885 return; |
| 1914 WebURLError web_error = error; | 1886 WebURLError web_error = error; |
| 1915 WebHistoryCommitType web_commit_type = | 1887 WebHistoryCommitType web_commit_type = |
| 1916 static_cast<WebHistoryCommitType>(commit_type); | 1888 static_cast<WebHistoryCommitType>(commit_type); |
| 1917 | 1889 |
| 1918 if (WebPluginContainerBase* plugin = PluginContainerFromFrame(GetFrame())) | 1890 if (WebPluginContainerBase* plugin = CurrentPluginContainer(GetFrame())) |
| 1919 plugin->DidFailLoading(error); | 1891 plugin->DidFailLoading(error); |
| 1920 | 1892 |
| 1921 if (was_provisional) | 1893 if (was_provisional) |
| 1922 Client()->DidFailProvisionalLoad(web_error, web_commit_type); | 1894 Client()->DidFailProvisionalLoad(web_error, web_commit_type); |
| 1923 else | 1895 else |
| 1924 Client()->DidFailLoad(web_error, web_commit_type); | 1896 Client()->DidFailLoad(web_error, web_commit_type); |
| 1925 } | 1897 } |
| 1926 | 1898 |
| 1927 void WebLocalFrameImpl::DidFinish() { | 1899 void WebLocalFrameImpl::DidFinish() { |
| 1928 if (!Client()) | 1900 if (!Client()) |
| 1929 return; | 1901 return; |
| 1930 | 1902 |
| 1931 if (WebPluginContainerBase* plugin = PluginContainerFromFrame(GetFrame())) | 1903 if (WebPluginContainerBase* plugin = CurrentPluginContainer(GetFrame())) |
| 1932 plugin->DidFinishLoading(); | 1904 plugin->DidFinishLoading(); |
| 1933 | 1905 |
| 1934 Client()->DidFinishLoad(); | 1906 Client()->DidFinishLoad(); |
| 1935 } | 1907 } |
| 1936 | 1908 |
| 1937 void WebLocalFrameImpl::SetCanHaveScrollbars(bool can_have_scrollbars) { | 1909 void WebLocalFrameImpl::SetCanHaveScrollbars(bool can_have_scrollbars) { |
| 1938 if (FrameView* view = GetFrameView()) | 1910 if (FrameView* view = GetFrameView()) |
| 1939 view->SetCanHaveScrollbars(can_have_scrollbars); | 1911 view->SetCanHaveScrollbars(can_have_scrollbars); |
| 1940 } | 1912 } |
| 1941 | 1913 |
| (...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2602 | 2574 |
| 2603 TextCheckerClient& WebLocalFrameImpl::GetTextCheckerClient() const { | 2575 TextCheckerClient& WebLocalFrameImpl::GetTextCheckerClient() const { |
| 2604 return *text_checker_client_; | 2576 return *text_checker_client_; |
| 2605 } | 2577 } |
| 2606 | 2578 |
| 2607 void WebLocalFrameImpl::SetTextCheckClient( | 2579 void WebLocalFrameImpl::SetTextCheckClient( |
| 2608 WebTextCheckClient* text_check_client) { | 2580 WebTextCheckClient* text_check_client) { |
| 2609 text_check_client_ = text_check_client; | 2581 text_check_client_ = text_check_client; |
| 2610 } | 2582 } |
| 2611 | 2583 |
| 2584 WebPluginContainerBase* WebLocalFrameImpl::CurrentPluginContainer( | |
| 2585 LocalFrame* frame, | |
| 2586 Node* node) const { | |
|
dcheng
2017/05/19 09:07:02
From what I can tell, there are no callers that pa
slangley
2017/05/21 23:53:33
There is one caller that passes a Node - "WebLocal
| |
| 2587 DCHECK(frame); | |
| 2588 return frame->GetWebPluginContainerBase(node); | |
| 2589 } | |
| 2590 | |
| 2612 } // namespace blink | 2591 } // namespace blink |
| OLD | NEW |