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

Side by Side Diff: WebCore/html/HTMLObjectElement.cpp

Issue 3551010: Merge 66992 - 2010-09-08 Andy Estes <aestes@apple.com>... (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/517/
Patch Set: Created 10 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 | « WebCore/ChangeLog ('k') | WebCore/loader/SubframeLoader.h » ('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) 2000 Stefan Schimanski (1Stein@gmx.de) 4 * (C) 2000 Stefan Schimanski (1Stein@gmx.de)
5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed. 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed.
6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 if (srcIndex == -1 && dataIndex != -1) { 156 if (srcIndex == -1 && dataIndex != -1) {
157 paramNames->append("src"); 157 paramNames->append("src");
158 paramValues->append((*paramValues)[dataIndex]); 158 paramValues->append((*paramValues)[dataIndex]);
159 } 159 }
160 } 160 }
161 161
162 // FIXME: This function should not deal with url or serviceType! 162 // FIXME: This function should not deal with url or serviceType!
163 void HTMLObjectElement::parametersForPlugin(Vector<String>& paramNames, Vector<S tring>& paramValues, String& url, String& serviceType) 163 void HTMLObjectElement::parametersForPlugin(Vector<String>& paramNames, Vector<S tring>& paramValues, String& url, String& serviceType)
164 { 164 {
165 HashSet<StringImpl*, CaseFoldingHash> uniqueParamNames; 165 HashSet<StringImpl*, CaseFoldingHash> uniqueParamNames;
166 String urlParam;
166 167
167 // Scan the PARAM children and store their name/value pairs. 168 // Scan the PARAM children and store their name/value pairs.
168 // Get the URL and type from the params if we don't already have them. 169 // Get the URL and type from the params if we don't already have them.
169 for (Node* child = firstChild(); child; child = child->nextSibling()) { 170 for (Node* child = firstChild(); child; child = child->nextSibling()) {
170 if (!child->hasTagName(paramTag)) 171 if (!child->hasTagName(paramTag))
171 continue; 172 continue;
172 173
173 HTMLParamElement* p = static_cast<HTMLParamElement*>(child); 174 HTMLParamElement* p = static_cast<HTMLParamElement*>(child);
174 String name = p->name(); 175 String name = p->name();
175 if (name.isEmpty()) 176 if (name.isEmpty())
176 continue; 177 continue;
177 178
178 uniqueParamNames.add(name.impl()); 179 uniqueParamNames.add(name.impl());
179 paramNames.append(p->name()); 180 paramNames.append(p->name());
180 paramValues.append(p->value()); 181 paramValues.append(p->value());
181 182
182 // FIXME: url adjustment does not belong in this function. 183 // FIXME: url adjustment does not belong in this function.
183 if (url.isEmpty() && (equalIgnoringCase(name, "src") || equalIgnoringCas e(name, "movie") || equalIgnoringCase(name, "code") || equalIgnoringCase(name, " url"))) 184 if (url.isEmpty() && urlParam.isEmpty() && (equalIgnoringCase(name, "src ") || equalIgnoringCase(name, "movie") || equalIgnoringCase(name, "code") || equ alIgnoringCase(name, "url")))
184 url = deprecatedParseURL(p->value()); 185 urlParam = deprecatedParseURL(p->value());
185 // FIXME: serviceType calculation does not belong in this function. 186 // FIXME: serviceType calculation does not belong in this function.
186 if (serviceType.isEmpty() && equalIgnoringCase(name, "type")) { 187 if (serviceType.isEmpty() && equalIgnoringCase(name, "type")) {
187 serviceType = p->value(); 188 serviceType = p->value();
188 size_t pos = serviceType.find(";"); 189 size_t pos = serviceType.find(";");
189 if (pos != notFound) 190 if (pos != notFound)
190 serviceType = serviceType.left(pos); 191 serviceType = serviceType.left(pos);
191 } 192 }
192 } 193 }
193 194
194 // When OBJECT is used for an applet via Sun's Java plugin, the CODEBASE att ribute in the tag 195 // When OBJECT is used for an applet via Sun's Java plugin, the CODEBASE att ribute in the tag
(...skipping 15 matching lines...) Expand all
210 const AtomicString& name = it->name().localName(); 211 const AtomicString& name = it->name().localName();
211 if (!uniqueParamNames.contains(name.impl())) { 212 if (!uniqueParamNames.contains(name.impl())) {
212 paramNames.append(name.string()); 213 paramNames.append(name.string());
213 paramValues.append(it->value().string()); 214 paramValues.append(it->value().string());
214 } 215 }
215 } 216 }
216 } 217 }
217 218
218 mapDataParamToSrc(&paramNames, &paramValues); 219 mapDataParamToSrc(&paramNames, &paramValues);
219 220
220 // If we still don't have a type, try to map from a specific CLASSID to a ty pe. 221 // HTML5 says that an object resource's URL is specified by the object's dat a
221 if (serviceType.isEmpty()) 222 // attribute, not by a param element. However, for compatibility, allow the
222 serviceType = serviceTypeForClassId(classId()); 223 // resource's URL to be given by a param named "src", "movie", "code" or "ur l"
224 // if we know that resource points to a plug-in.
225 if (url.isEmpty() && !urlParam.isEmpty()) {
226 SubframeLoader* loader = document()->frame()->loader()->subframeLoader() ;
227 if (loader->resourceWillUsePlugin(urlParam, serviceType))
228 url = urlParam;
229 }
223 } 230 }
224 231
225 232
226 bool HTMLObjectElement::hasFallbackContent() const 233 bool HTMLObjectElement::hasFallbackContent() const
227 { 234 {
228 for (Node* child = firstChild(); child; child = child->nextSibling()) { 235 for (Node* child = firstChild(); child; child = child->nextSibling()) {
229 // Ignore whitespace-only text, and <param> tags, any other content is f allback content. 236 // Ignore whitespace-only text, and <param> tags, any other content is f allback content.
230 if (child->isTextNode()) { 237 if (child->isTextNode()) {
231 if (!static_cast<Text*>(child)->containsOnlyWhitespace()) 238 if (!static_cast<Text*>(child)->containsOnlyWhitespace())
232 return true; 239 return true;
(...skipping 10 matching lines...) Expand all
243 ASSERT(!renderEmbeddedObject()->pluginCrashedOrWasMissing()); 250 ASSERT(!renderEmbeddedObject()->pluginCrashedOrWasMissing());
244 // FIXME: We should ASSERT(needsWidgetUpdate()), but currently 251 // FIXME: We should ASSERT(needsWidgetUpdate()), but currently
245 // FrameView::updateWidget() calls updateWidget(false) without checking if 252 // FrameView::updateWidget() calls updateWidget(false) without checking if
246 // the widget actually needs updating! 253 // the widget actually needs updating!
247 setNeedsWidgetUpdate(false); 254 setNeedsWidgetUpdate(false);
248 // FIXME: This should ASSERT isFinishedParsingChildren() instead. 255 // FIXME: This should ASSERT isFinishedParsingChildren() instead.
249 if (!isFinishedParsingChildren()) 256 if (!isFinishedParsingChildren())
250 return; 257 return;
251 258
252 String url = this->url(); 259 String url = this->url();
260
261 // If the object does not specify a MIME type via a type attribute, but does
262 // contain a classid attribute, try to map the classid to a MIME type.
253 String serviceType = this->serviceType(); 263 String serviceType = this->serviceType();
264 if (serviceType.isEmpty())
265 serviceType = serviceTypeForClassId(classId());
254 266
255 // FIXME: These should be joined into a PluginParameters class. 267 // FIXME: These should be joined into a PluginParameters class.
256 Vector<String> paramNames; 268 Vector<String> paramNames;
257 Vector<String> paramValues; 269 Vector<String> paramValues;
258 parametersForPlugin(paramNames, paramValues, url, serviceType); 270 parametersForPlugin(paramNames, paramValues, url, serviceType);
259 271
260 // Note: url is modified above by parametersForPlugin. 272 // Note: url is modified above by parametersForPlugin.
261 if (!allowedToLoadFrameURL(url)) 273 if (!allowedToLoadFrameURL(url))
262 return; 274 return;
263 275
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 addSubresourceURL(urls, document()->completeURL(getAttribute(dataAttr))); 465 addSubresourceURL(urls, document()->completeURL(getAttribute(dataAttr)));
454 466
455 // FIXME: Passing a string that starts with "#" to the completeURL function does 467 // FIXME: Passing a string that starts with "#" to the completeURL function does
456 // not seem like it would work. The image element has similar but not identi cal code. 468 // not seem like it would work. The image element has similar but not identi cal code.
457 const AtomicString& useMap = getAttribute(usemapAttr); 469 const AtomicString& useMap = getAttribute(usemapAttr);
458 if (useMap.startsWith("#")) 470 if (useMap.startsWith("#"))
459 addSubresourceURL(urls, document()->completeURL(useMap)); 471 addSubresourceURL(urls, document()->completeURL(useMap));
460 } 472 }
461 473
462 } 474 }
OLDNEW
« no previous file with comments | « WebCore/ChangeLog ('k') | WebCore/loader/SubframeLoader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698