Diff
Modified: trunk/Source/WebCore/ChangeLog (116723 => 116724)
--- trunk/Source/WebCore/ChangeLog 2012-05-11 03:28:46 UTC (rev 116723)
+++ trunk/Source/WebCore/ChangeLog 2012-05-11 04:00:34 UTC (rev 116724)
@@ -1,3 +1,37 @@
+2012-05-10 Sheriff Bot <[email protected]>
+
+ Unreviewed, rolling out r116715.
+ http://trac.webkit.org/changeset/116715
+ https://bugs.webkit.org/show_bug.cgi?id=86172
+
+ Broke http/tests/security/cross-frame-access-selection.html
+ (Requested by tkent on #webkit).
+
+ * dom/Document.cpp:
+ (WebCore):
+ (WebCore::Document::getSelection):
+ * dom/Document.h:
+ (Document):
+ * dom/ShadowRoot.cpp:
+ (WebCore::ShadowRoot::selection):
+ * dom/TreeScope.cpp:
+ (WebCore::TreeScope::~TreeScope):
+ * dom/TreeScope.h:
+ (WebCore):
+ (TreeScope):
+ * page/DOMSelection.cpp:
+ (WebCore::DOMSelection::DOMSelection):
+ * page/DOMSelection.h:
+ (WebCore):
+ (WebCore::DOMSelection::create):
+ (DOMSelection):
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::~DOMWindow):
+ (WebCore::DOMWindow::clearDOMWindowProperties):
+ (WebCore::DOMWindow::getSelection):
+ * page/DOMWindow.h:
+ (DOMWindow):
+
2012-05-10 Hajime Morrita <[email protected]>
WebKit should support tab-size.
Modified: trunk/Source/WebCore/dom/Document.cpp (116723 => 116724)
--- trunk/Source/WebCore/dom/Document.cpp 2012-05-11 03:28:46 UTC (rev 116723)
+++ trunk/Source/WebCore/dom/Document.cpp 2012-05-11 04:00:34 UTC (rev 116724)
@@ -46,7 +46,6 @@
#include "ContentSecurityPolicy.h"
#include "CookieJar.h"
#include "DOMImplementation.h"
-#include "DOMSelection.h"
#include "DOMWindow.h"
#include "DateComponents.h"
#include "DeviceMotionController.h"
@@ -5093,6 +5092,12 @@
element->updateFocusAppearance(m_updateFocusAppearanceRestoresSelection);
}
+// FF method for accessing the selection added for compatibility.
+DOMSelection* Document::getSelection() const
+{
+ return frame() ? frame()->domWindow()->getSelection() : 0;
+}
+
void Document::attachRange(Range* range)
{
ASSERT(!m_ranges.contains(range));
Modified: trunk/Source/WebCore/dom/Document.h (116723 => 116724)
--- trunk/Source/WebCore/dom/Document.h 2012-05-11 03:28:46 UTC (rev 116723)
+++ trunk/Source/WebCore/dom/Document.h 2012-05-11 04:00:34 UTC (rev 116724)
@@ -969,6 +969,9 @@
void updateFocusAppearanceSoon(bool restorePreviousSelection);
void cancelFocusAppearanceUpdate();
+ // FF method for accessing the selection added for compatibility.
+ DOMSelection* getSelection() const;
+
// Extension for manipulating canvas drawing contexts for use in CSS
CanvasRenderingContext* getCSSCanvasContext(const String& type, const String& name, int width, int height);
HTMLCanvasElement* getCSSCanvasElement(const String& name);
Modified: trunk/Source/WebCore/dom/ShadowRoot.cpp (116723 => 116724)
--- trunk/Source/WebCore/dom/ShadowRoot.cpp 2012-05-11 03:28:46 UTC (rev 116723)
+++ trunk/Source/WebCore/dom/ShadowRoot.cpp 2012-05-11 04:00:34 UTC (rev 116724)
@@ -151,8 +151,8 @@
DOMSelection* ShadowRoot::selection()
{
- if (document())
- return document()->getSelection();
+ if (document() && document()->domWindow())
+ return document()->domWindow()->getSelection();
return 0;
}
Modified: trunk/Source/WebCore/dom/TreeScope.cpp (116723 => 116724)
--- trunk/Source/WebCore/dom/TreeScope.cpp 2012-05-11 03:28:46 UTC (rev 116723)
+++ trunk/Source/WebCore/dom/TreeScope.cpp 2012-05-11 04:00:34 UTC (rev 116724)
@@ -27,7 +27,6 @@
#include "TreeScope.h"
#include "ContainerNode.h"
-#include "DOMSelection.h"
#include "Document.h"
#include "Element.h"
#include "FocusController.h"
@@ -37,7 +36,6 @@
#include "HTMLMapElement.h"
#include "HTMLNames.h"
#include "Page.h"
-#include "RuntimeEnabledFeatures.h"
#include "TreeScopeAdopter.h"
#include <wtf/text/AtomicString.h>
#include <wtf/text/CString.h>
@@ -56,10 +54,6 @@
TreeScope::~TreeScope()
{
- if (m_selection) {
- m_selection->clearTreeScope();
- m_selection = 0;
- }
}
void TreeScope::destroyTreeScopeData()
@@ -122,18 +116,6 @@
return static_cast<HTMLMapElement*>(m_imageMapsByName.getElementByMapName(AtomicString(name).impl(), this));
}
-DOMSelection* TreeScope::getSelection() const
-{
- if (!rootNode()->document()->frame())
- return 0;
-
- if (m_selection)
- return m_selection.get();
-
- m_selection = DOMSelection::create(rootNode()->document());
- return m_selection.get();
-}
-
Element* TreeScope::findAnchor(const String& name)
{
if (name.isEmpty())
Modified: trunk/Source/WebCore/dom/TreeScope.h (116723 => 116724)
--- trunk/Source/WebCore/dom/TreeScope.h 2012-05-11 03:28:46 UTC (rev 116723)
+++ trunk/Source/WebCore/dom/TreeScope.h 2012-05-11 04:00:34 UTC (rev 116724)
@@ -33,7 +33,6 @@
namespace WebCore {
class ContainerNode;
-class DOMSelection;
class Element;
class HTMLMapElement;
class Node;
@@ -63,8 +62,6 @@
void removeNodeListCache() { ASSERT(m_numNodeListCaches > 0); --m_numNodeListCaches; }
bool hasNodeListCaches() const { return m_numNodeListCaches; }
- DOMSelection* getSelection() const;
-
// Find first anchor with the given name.
// First searches for an element with the given ID, but if that fails, then looks
// for an anchor with the given name. ID matching is always case sensitive, but
@@ -93,8 +90,6 @@
DocumentOrderedMap m_imageMapsByName;
unsigned m_numNodeListCaches;
-
- mutable RefPtr<DOMSelection> m_selection;
};
inline bool TreeScope::hasElementWithId(AtomicStringImpl* id) const
Modified: trunk/Source/WebCore/page/DOMSelection.cpp (116723 => 116724)
--- trunk/Source/WebCore/page/DOMSelection.cpp 2012-05-11 03:28:46 UTC (rev 116723)
+++ trunk/Source/WebCore/page/DOMSelection.cpp 2012-05-11 04:00:34 UTC (rev 116724)
@@ -58,18 +58,11 @@
return shadowAncestor;
}
-DOMSelection::DOMSelection(const TreeScope* treeScope)
- : m_treeScope(treeScope)
- , m_frame(treeScope->rootNode()->document()->frame())
+DOMSelection::DOMSelection(Frame* frame)
+ : DOMWindowProperty(frame)
{
}
-void DOMSelection::clearTreeScope()
-{
- m_frame = 0;
- m_treeScope = 0;
-}
-
const VisibleSelection& DOMSelection::visibleSelection() const
{
ASSERT(m_frame);
Modified: trunk/Source/WebCore/page/DOMSelection.h (116723 => 116724)
--- trunk/Source/WebCore/page/DOMSelection.h 2012-05-11 03:28:46 UTC (rev 116723)
+++ trunk/Source/WebCore/page/DOMSelection.h 2012-05-11 04:00:34 UTC (rev 116724)
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2007 Apple Inc. All rights reserved.
- * Copyright (C) 2012 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -39,19 +38,16 @@
namespace WebCore {
class Frame;
- class Node;
class Range;
- class TreeScope;
+ class Node;
class VisibleSelection;
typedef int ExceptionCode;
- class DOMSelection : public RefCounted<DOMSelection> {
+ class DOMSelection : public RefCounted<DOMSelection>, public DOMWindowProperty {
public:
- static PassRefPtr<DOMSelection> create(const TreeScope* treeScope) { return adoptRef(new DOMSelection(treeScope)); }
+ static PassRefPtr<DOMSelection> create(Frame* frame) { return adoptRef(new DOMSelection(frame)); }
- void clearTreeScope();
-
// Safari Selection Object API
// These methods return the valid equivalents of internal editing positions.
Node* baseNode() const;
@@ -88,17 +84,12 @@
String toString();
- Frame* frame() const { return m_frame; }
-
// Microsoft Selection Object API
void empty();
private:
- const TreeScope* m_treeScope;
- Frame* m_frame;
+ explicit DOMSelection(Frame*);
- explicit DOMSelection(const TreeScope*);
-
// Convenience method for accessors, does not NULL check m_frame.
const VisibleSelection& visibleSelection() const;
Modified: trunk/Source/WebCore/page/DOMWindow.cpp (116723 => 116724)
--- trunk/Source/WebCore/page/DOMWindow.cpp 2012-05-11 03:28:46 UTC (rev 116723)
+++ trunk/Source/WebCore/page/DOMWindow.cpp 2012-05-11 04:00:34 UTC (rev 116724)
@@ -399,6 +399,7 @@
#ifndef NDEBUG
if (!m_suspendedForPageCache) {
ASSERT(!m_screen);
+ ASSERT(!m_selection);
ASSERT(!m_history);
ASSERT(!m_crypto);
ASSERT(!m_locationbar);
@@ -571,6 +572,7 @@
m_properties.clear();
m_screen = 0;
+ m_selection = 0;
m_history = 0;
m_crypto = 0;
m_locationbar = 0;
@@ -884,10 +886,11 @@
DOMSelection* DOMWindow::getSelection()
{
- if (!isCurrentlyDisplayedInFrame() || !m_frame)
+ if (!isCurrentlyDisplayedInFrame())
return 0;
-
- return m_frame->document()->getSelection();
+ if (!m_selection)
+ m_selection = DOMSelection::create(m_frame);
+ return m_selection.get();
}
Element* DOMWindow::frameElement() const
Modified: trunk/Source/WebCore/page/DOMWindow.h (116723 => 116724)
--- trunk/Source/WebCore/page/DOMWindow.h 2012-05-11 03:28:46 UTC (rev 116723)
+++ trunk/Source/WebCore/page/DOMWindow.h 2012-05-11 04:00:34 UTC (rev 116724)
@@ -428,6 +428,7 @@
HashSet<DOMWindowProperty*> m_properties;
mutable RefPtr<Screen> m_screen;
+ mutable RefPtr<DOMSelection> m_selection;
mutable RefPtr<History> m_history;
mutable RefPtr<Crypto> m_crypto;
mutable RefPtr<BarInfo> m_locationbar;