Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1383)

Side by Side Diff: third_party/WebKit/Source/core/editing/DOMSelection.cpp

Issue 2386073003: Prune createVisibleSelectionDeprecated from FrameSelection (Closed)
Patch Set: Move layout from FrameSelection::setSelectedRange to DOMSelection::addRange Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/editing/FrameSelection.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2012 Google Inc. All rights reserved. 3 * Copyright (C) 2012 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 8 *
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 return; 226 return;
227 227
228 const VisibleSelection& selection = frame()->selection().selection(); 228 const VisibleSelection& selection = frame()->selection().selection();
229 229
230 if (selection.isNone()) { 230 if (selection.isNone()) {
231 exceptionState.throwDOMException(InvalidStateError, 231 exceptionState.throwDOMException(InvalidStateError,
232 "there is no selection."); 232 "there is no selection.");
233 return; 233 return;
234 } 234 }
235 235
236 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets
237 // needs to be audited. See http://crbug.com/590369 for more details.
238 // In the long term, we should change FrameSelection::setSelection to take a
239 // parameter that does not require clean layout, so that modifying selection
240 // no longer performs synchronous layout by itself.
241 frame()->document()->updateStyleAndLayoutIgnorePendingStylesheets();
242
236 frame()->selection().moveTo(selection.end(), SelDefaultAffinity); 243 frame()->selection().moveTo(selection.end(), SelDefaultAffinity);
237 } 244 }
238 245
239 void DOMSelection::collapseToStart(ExceptionState& exceptionState) { 246 void DOMSelection::collapseToStart(ExceptionState& exceptionState) {
240 if (!isAvailable()) 247 if (!isAvailable())
241 return; 248 return;
242 249
243 const VisibleSelection& selection = frame()->selection().selection(); 250 const VisibleSelection& selection = frame()->selection().selection();
244 251
245 if (selection.isNone()) { 252 if (selection.isNone()) {
246 exceptionState.throwDOMException(InvalidStateError, 253 exceptionState.throwDOMException(InvalidStateError,
247 "there is no selection."); 254 "there is no selection.");
248 return; 255 return;
249 } 256 }
250 257
258 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets
259 // needs to be audited. See http://crbug.com/590369 for more details.
260 // In the long term, we should change FrameSelection::setSelection to take a
261 // parameter that does not require clean layout, so that modifying selection
262 // no longer performs synchronous layout by itself.
263 frame()->document()->updateStyleAndLayoutIgnorePendingStylesheets();
264
251 frame()->selection().moveTo(selection.start(), SelDefaultAffinity); 265 frame()->selection().moveTo(selection.start(), SelDefaultAffinity);
252 } 266 }
253 267
254 void DOMSelection::empty() { 268 void DOMSelection::empty() {
255 if (!isAvailable()) 269 if (!isAvailable())
256 return; 270 return;
257 frame()->selection().clear(); 271 frame()->selection().clear();
258 } 272 }
259 273
260 void DOMSelection::setBaseAndExtent(Node* baseNode, 274 void DOMSelection::setBaseAndExtent(Node* baseNode,
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 return; 451 return;
438 } 452 }
439 453
440 FrameSelection& selection = frame()->selection(); 454 FrameSelection& selection = frame()->selection();
441 455
442 if (newRange->ownerDocument() != selection.document()) { 456 if (newRange->ownerDocument() != selection.document()) {
443 // "editing/selection/selection-in-iframe-removed-crash.html" goes here. 457 // "editing/selection/selection-in-iframe-removed-crash.html" goes here.
444 return; 458 return;
445 } 459 }
446 460
461 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets
462 // needs to be audited. See http://crbug.com/590369 for more details.
463 // In the long term, we should change FrameSelection::setSelection to take a
464 // parameter that does not require clean layout, so that modifying selection
465 // no longer performs synchronous layout by itself.
466 frame()->document()->updateStyleAndLayoutIgnorePendingStylesheets();
Xiaocheng 2016/10/04 01:01:40 Originally, DOMSelection::addRange doesn't trigger
yosin_UTC9 2016/10/04 01:52:06 Upon failure, we don't grantee state. So, it shoul
467
447 if (selection.isNone()) { 468 if (selection.isNone()) {
448 selection.setSelectedRange(newRange, VP_DEFAULT_AFFINITY); 469 selection.setSelectedRange(newRange, VP_DEFAULT_AFFINITY);
449 return; 470 return;
450 } 471 }
451 472
452 Range* originalRange = selection.firstRange(); 473 Range* originalRange = selection.firstRange();
453 474
454 if (originalRange->startContainer()->document() != 475 if (originalRange->startContainer()->document() !=
455 newRange->startContainer()->document()) { 476 newRange->startContainer()->document()) {
456 addConsoleError( 477 addConsoleError(
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 m_treeScope->document().addConsoleMessage( 657 m_treeScope->document().addConsoleMessage(
637 ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, message)); 658 ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, message));
638 } 659 }
639 660
640 DEFINE_TRACE(DOMSelection) { 661 DEFINE_TRACE(DOMSelection) {
641 visitor->trace(m_treeScope); 662 visitor->trace(m_treeScope);
642 DOMWindowProperty::trace(visitor); 663 DOMWindowProperty::trace(visitor);
643 } 664 }
644 665
645 } // namespace blink 666 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/editing/FrameSelection.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698