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

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

Issue 4214004: Merge 70748 - 2010-10-27 Andy Estes <aestes@apple.com>... (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/517/
Patch Set: Created 10 years, 1 month 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 | « LayoutTests/fast/replaced/object-with-non-empty-classid-triggers-fallback-expected.txt ('k') | no next file » | 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 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 document->removeExtraNamedItem(m_id); 109 document->removeExtraNamedItem(m_id);
110 document->addExtraNamedItem(newId); 110 document->addExtraNamedItem(newId);
111 } 111 }
112 m_id = newId; 112 m_id = newId;
113 // also call superclass 113 // also call superclass
114 HTMLPlugInImageElement::parseMappedAttribute(attr); 114 HTMLPlugInImageElement::parseMappedAttribute(attr);
115 } else 115 } else
116 HTMLPlugInImageElement::parseMappedAttribute(attr); 116 HTMLPlugInImageElement::parseMappedAttribute(attr);
117 } 117 }
118 118
119 typedef HashMap<String, String, CaseFoldingHash> ClassIdToTypeMap;
120
121 static ClassIdToTypeMap* createClassIdToTypeMap()
122 {
123 ClassIdToTypeMap* map = new ClassIdToTypeMap;
124 map->add("clsid:D27CDB6E-AE6D-11CF-96B8-444553540000", "application/x-shockw ave-flash");
125 map->add("clsid:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA", "audio/x-pn-realaudio -plugin");
126 map->add("clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B", "video/quicktime");
127 map->add("clsid:166B1BCA-3F9C-11CF-8075-444553540000", "application/x-direct or");
128 map->add("clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6", "application/x-mplaye r2");
129 map->add("clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95", "application/x-mplaye r2");
130 return map;
131 }
132
133 static String serviceTypeForClassId(const String& classId)
134 {
135 // Return early if classId is empty (since we won't do anything below).
136 // Furthermore, if classId is null, calling get() below will crash.
137 if (classId.isEmpty())
138 return String();
139
140 static ClassIdToTypeMap* map = createClassIdToTypeMap();
141 return map->get(classId);
142 }
143
144 static void mapDataParamToSrc(Vector<String>* paramNames, Vector<String>* paramV alues) 119 static void mapDataParamToSrc(Vector<String>* paramNames, Vector<String>* paramV alues)
145 { 120 {
146 // Some plugins don't understand the "data" attribute of the OBJECT tag (i.e . Real and WMP 121 // Some plugins don't understand the "data" attribute of the OBJECT tag (i.e . Real and WMP
147 // require "src" attribute). 122 // require "src" attribute).
148 int srcIndex = -1, dataIndex = -1; 123 int srcIndex = -1, dataIndex = -1;
149 for (unsigned int i = 0; i < paramNames->size(); ++i) { 124 for (unsigned int i = 0; i < paramNames->size(); ++i) {
150 if (equalIgnoringCase((*paramNames)[i], "src")) 125 if (equalIgnoringCase((*paramNames)[i], "src"))
151 srcIndex = i; 126 srcIndex = i;
152 else if (equalIgnoringCase((*paramNames)[i], "data")) 127 else if (equalIgnoringCase((*paramNames)[i], "data"))
153 dataIndex = i; 128 dataIndex = i;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 void HTMLObjectElement::updateWidget(bool onlyCreateNonNetscapePlugins) 223 void HTMLObjectElement::updateWidget(bool onlyCreateNonNetscapePlugins)
249 { 224 {
250 ASSERT(!renderEmbeddedObject()->pluginCrashedOrWasMissing()); 225 ASSERT(!renderEmbeddedObject()->pluginCrashedOrWasMissing());
251 // FIXME: We should ASSERT(needsWidgetUpdate()), but currently 226 // FIXME: We should ASSERT(needsWidgetUpdate()), but currently
252 // FrameView::updateWidget() calls updateWidget(false) without checking if 227 // FrameView::updateWidget() calls updateWidget(false) without checking if
253 // the widget actually needs updating! 228 // the widget actually needs updating!
254 setNeedsWidgetUpdate(false); 229 setNeedsWidgetUpdate(false);
255 // FIXME: This should ASSERT isFinishedParsingChildren() instead. 230 // FIXME: This should ASSERT isFinishedParsingChildren() instead.
256 if (!isFinishedParsingChildren()) 231 if (!isFinishedParsingChildren())
257 return; 232 return;
258 233
259 String url = this->url(); 234 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.
263 String serviceType = this->serviceType(); 235 String serviceType = this->serviceType();
264 if (serviceType.isEmpty())
265 serviceType = serviceTypeForClassId(classId());
266 236
267 // FIXME: These should be joined into a PluginParameters class. 237 // FIXME: These should be joined into a PluginParameters class.
268 Vector<String> paramNames; 238 Vector<String> paramNames;
269 Vector<String> paramValues; 239 Vector<String> paramValues;
270 parametersForPlugin(paramNames, paramValues, url, serviceType); 240 parametersForPlugin(paramNames, paramValues, url, serviceType);
271 241
272 // Note: url is modified above by parametersForPlugin. 242 // Note: url is modified above by parametersForPlugin.
273 if (!allowedToLoadFrameURL(url)) 243 if (!allowedToLoadFrameURL(url))
274 return; 244 return;
275 245
276 bool fallbackContent = hasFallbackContent(); 246 bool fallbackContent = hasFallbackContent();
277 renderEmbeddedObject()->setHasFallbackContent(fallbackContent); 247 renderEmbeddedObject()->setHasFallbackContent(fallbackContent);
278 248
279 if (onlyCreateNonNetscapePlugins && wouldLoadAsNetscapePlugin(url, serviceTy pe)) 249 if (onlyCreateNonNetscapePlugins && wouldLoadAsNetscapePlugin(url, serviceTy pe))
280 return; 250 return;
281 251
282 bool beforeLoadAllowedLoad = dispatchBeforeLoadEvent(url); 252 bool beforeLoadAllowedLoad = dispatchBeforeLoadEvent(url);
283 253
284 // beforeload events can modify the DOM, potentially causing 254 // beforeload events can modify the DOM, potentially causing
285 // RenderWidget::destroy() to be called. Ensure we haven't been 255 // RenderWidget::destroy() to be called. Ensure we haven't been
286 // destroyed before continuing. 256 // destroyed before continuing.
287 // FIXME: Should this render fallback content? 257 // FIXME: Should this render fallback content?
288 if (!renderer()) 258 if (!renderer())
289 return; 259 return;
290 260
261 // HTML5 says that fallback content should be rendered if a non-empty
262 // classid is specified for which the UA can't find a suitable plug-in.
263 bool hasEmptyClassId = classId().isEmpty();
264
291 SubframeLoader* loader = document()->frame()->loader()->subframeLoader(); 265 SubframeLoader* loader = document()->frame()->loader()->subframeLoader();
292 bool success = beforeLoadAllowedLoad && loader->requestObject(this, url, get Attribute(nameAttr), serviceType, paramNames, paramValues); 266 bool success = beforeLoadAllowedLoad && hasEmptyClassId && loader->requestOb ject(this, url, getAttribute(nameAttr), serviceType, paramNames, paramValues);
293 267
294 if (!success && fallbackContent) 268 if (!success && fallbackContent)
295 renderFallbackContent(); 269 renderFallbackContent();
296 } 270 }
297 271
298 bool HTMLObjectElement::rendererIsNeeded(RenderStyle* style) 272 bool HTMLObjectElement::rendererIsNeeded(RenderStyle* style)
299 { 273 {
300 // FIXME: This check should not be needed, detached documents never render! 274 // FIXME: This check should not be needed, detached documents never render!
301 Frame* frame = document()->frame(); 275 Frame* frame = document()->frame();
302 if (!frame) 276 if (!frame)
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 addSubresourceURL(urls, document()->completeURL(getAttribute(dataAttr))); 439 addSubresourceURL(urls, document()->completeURL(getAttribute(dataAttr)));
466 440
467 // FIXME: Passing a string that starts with "#" to the completeURL function does 441 // FIXME: Passing a string that starts with "#" to the completeURL function does
468 // not seem like it would work. The image element has similar but not identi cal code. 442 // not seem like it would work. The image element has similar but not identi cal code.
469 const AtomicString& useMap = getAttribute(usemapAttr); 443 const AtomicString& useMap = getAttribute(usemapAttr);
470 if (useMap.startsWith("#")) 444 if (useMap.startsWith("#"))
471 addSubresourceURL(urls, document()->completeURL(useMap)); 445 addSubresourceURL(urls, document()->completeURL(useMap));
472 } 446 }
473 447
474 } 448 }
OLDNEW
« no previous file with comments | « LayoutTests/fast/replaced/object-with-non-empty-classid-triggers-fallback-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698