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

Side by Side Diff: Source/core/html/HTMLLinkElement.cpp

Issue 205523003: Remove beforeload events. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Remove more tests Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/html/HTMLLinkElement.h ('k') | Source/core/html/HTMLMediaElement.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) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed. 5 * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed.
6 * Copyright (C) 2009 Rob Buis (rwlbuis@gmail.com) 6 * Copyright (C) 2009 Rob Buis (rwlbuis@gmail.com)
7 * Copyright (C) 2011 Google Inc. All rights reserved. 7 * Copyright (C) 2011 Google Inc. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 else 129 else
130 parseSizes(value.characters16(), value.length(), iconSizes); 130 parseSizes(value.characters16(), value.length(), iconSizes);
131 } 131 }
132 132
133 inline HTMLLinkElement::HTMLLinkElement(Document& document, bool createdByParser ) 133 inline HTMLLinkElement::HTMLLinkElement(Document& document, bool createdByParser )
134 : HTMLElement(linkTag, document) 134 : HTMLElement(linkTag, document)
135 , m_linkLoader(this) 135 , m_linkLoader(this)
136 , m_sizes(DOMSettableTokenList::create()) 136 , m_sizes(DOMSettableTokenList::create())
137 , m_createdByParser(createdByParser) 137 , m_createdByParser(createdByParser)
138 , m_isInShadowTree(false) 138 , m_isInShadowTree(false)
139 , m_beforeLoadRecurseCount(0)
140 { 139 {
141 ScriptWrappable::init(this); 140 ScriptWrappable::init(this);
142 } 141 }
143 142
144 PassRefPtr<HTMLLinkElement> HTMLLinkElement::create(Document& document, bool cre atedByParser) 143 PassRefPtr<HTMLLinkElement> HTMLLinkElement::create(Document& document, bool cre atedByParser)
145 { 144 {
146 return adoptRef(new HTMLLinkElement(document, createdByParser)); 145 return adoptRef(new HTMLLinkElement(document, createdByParser));
147 } 146 }
148 147
149 HTMLLinkElement::~HTMLLinkElement() 148 HTMLLinkElement::~HTMLLinkElement()
(...skipping 19 matching lines...) Expand all
169 } else if (name == sizesAttr) { 168 } else if (name == sizesAttr) {
170 m_sizes->setValue(value); 169 m_sizes->setValue(value);
171 parseSizesAttribute(value, m_iconSizes); 170 parseSizesAttribute(value, m_iconSizes);
172 process(); 171 process();
173 } else if (name == mediaAttr) { 172 } else if (name == mediaAttr) {
174 m_media = value.string().lower(); 173 m_media = value.string().lower();
175 process(); 174 process();
176 } else if (name == disabledAttr) { 175 } else if (name == disabledAttr) {
177 if (LinkStyle* link = linkStyle()) 176 if (LinkStyle* link = linkStyle())
178 link->setDisabledState(!value.isNull()); 177 link->setDisabledState(!value.isNull());
179 } else if (name == onbeforeloadAttr) 178 } else {
180 setAttributeEventListener(EventTypeNames::beforeload, createAttributeEve ntListener(this, name, value));
181 else {
182 if (name == titleAttr) { 179 if (name == titleAttr) {
183 if (LinkStyle* link = linkStyle()) 180 if (LinkStyle* link = linkStyle())
184 link->setSheetTitle(value); 181 link->setSheetTitle(value);
185 } 182 }
186 183
187 HTMLElement::parseAttribute(name, value); 184 HTMLElement::parseAttribute(name, value);
188 } 185 }
189 } 186 }
190 187
191 bool HTMLLinkElement::shouldLoadLink() 188 bool HTMLLinkElement::shouldLoadLink()
192 { 189 {
193 bool continueLoad = true; 190 return inDocument();
194 RefPtr<Document> originalDocument(document());
195 int recursionRank = ++m_beforeLoadRecurseCount;
196 if (!dispatchBeforeLoadEvent(getNonEmptyURLAttribute(hrefAttr)))
197 continueLoad = false;
198
199 // A beforeload handler might have removed us from the document or changed t he document.
200 if (continueLoad && (!inDocument() || document() != originalDocument))
201 continueLoad = false;
202
203 // If the beforeload handler recurses into the link element by mutating it, we should only
204 // let the latest (innermost) mutation occur.
205 if (recursionRank != m_beforeLoadRecurseCount)
206 continueLoad = false;
207
208 if (recursionRank == 1)
209 m_beforeLoadRecurseCount = 0;
210
211 return continueLoad;
212 } 191 }
213 192
214 bool HTMLLinkElement::loadLink(const String& type, const KURL& url) 193 bool HTMLLinkElement::loadLink(const String& type, const KURL& url)
215 { 194 {
216 return m_linkLoader.loadLink(m_relAttribute, fastGetAttribute(HTMLNames::cro ssoriginAttr), type, url, document()); 195 return m_linkLoader.loadLink(m_relAttribute, fastGetAttribute(HTMLNames::cro ssoriginAttr), type, url, document());
217 } 196 }
218 197
219 LinkResource* HTMLLinkElement::linkResourceToProcess() 198 LinkResource* HTMLLinkElement::linkResourceToProcess()
220 { 199 {
221 bool visible = inDocument() && !m_isInShadowTree; 200 bool visible = inDocument() && !m_isInShadowTree;
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 void LinkStyle::ownerRemoved() 697 void LinkStyle::ownerRemoved()
719 { 698 {
720 if (m_sheet) 699 if (m_sheet)
721 clearSheet(); 700 clearSheet();
722 701
723 if (styleSheetIsLoading()) 702 if (styleSheetIsLoading())
724 removePendingSheet(RemovePendingSheetNotifyLater); 703 removePendingSheet(RemovePendingSheetNotifyLater);
725 } 704 }
726 705
727 } // namespace WebCore 706 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/html/HTMLLinkElement.h ('k') | Source/core/html/HTMLMediaElement.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698