Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 247175 Details for
Bug 426183
Content type lookup fails for extensions containing a dot "."
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Fix
Bug 426183 Content type lookup fails with dot.patch (text/plain), 6.93 KB, created by
Curtis Windatt
on 2014-09-17 17:26:01 EDT
(
hide
)
Description:
Fix
Filename:
MIME Type:
Creator:
Curtis Windatt
Created:
2014-09-17 17:26:01 EDT
Size:
6.93 KB
patch
obsolete
>diff --git a/bundles/org.eclipse.orion.client.core/web/orion/contentTypes.js b/bundles/org.eclipse.orion.client.core/web/orion/contentTypes.js >index 6ffafcb..9ce6017 100644 >--- a/bundles/org.eclipse.orion.client.core/web/orion/contentTypes.js >+++ b/bundles/org.eclipse.orion.client.core/web/orion/contentTypes.js >@@ -46,32 +46,61 @@ > if(!cType) { > return false; > } >- return (cType.id === "application/octet-stream" || cType['extends'] === "application/octet-stream"); >+ return (cType.id === "application/octet-stream" || cType['extends'] === "application/octet-stream"); //$NON-NLS-0$ //$NON-NLS-1$ //$NON-NLS-2$ > } > >+ /** >+ * @name getFilenameContentType >+ * @description Return the best contentType match to the given filename or null if no match. Filename pattern checked first, then extension >+ * @param filename the filename to compare against contentTypes >+ * @param contentTypes the array of possible contentTypes to check >+ * @returns returns ContentType that is the best match or null >+ */ > function getFilenameContentType(/**String*/ filename, contentTypes) { >- function winner(best, other, filename, extension) { >- var nameMatch = other.filename.indexOf(filename) >= 0; >- var extMatch = contains(other.extension, extension.toLowerCase()); >- if (nameMatch || extMatch) { >- if (!best || (nameMatch && contains(best.extension, extension.toLowerCase()))) { >- return other; >- } >- } >- return best; >- } > if (typeof filename !== "string") { //$NON-NLS-0$ > return null; > } >- var extension = filename && filename.split(".").pop(); //$NON-NLS-0$ >+ > var best = null; >+ var current; >+ >+ var extStart = filename.indexOf('.'); //$NON-NLS-0$ >+ extStart++; // leading period not included in extension >+ var extension = filename.substring(extStart).toLowerCase(); >+ >+ // Check the most common cases, exact filename match or full extension match > for (var i=0; i < contentTypes.length; i++) { >- var type = contentTypes[i]; >- if (winner(best, type, filename, extension) === type) { >- best = type; >+ current = contentTypes[i]; >+ if (current.filename.indexOf(filename) >= 0){ >+ best = current; >+ break; >+ } >+ >+ if (contains(current.extension, extension)){ >+ // A filename match is considered better than a perfect extension match >+ best = current; >+ continue; > } > } >- return best; >+ >+ // Check the less common case where the filename contains periods (foo.bar.a.b check 'bar.a.b' then 'a.b' then 'b') >+ if (!best){ >+ extStart = extension.indexOf('.'); //$NON-NLS-0$ >+ while (!best && extStart >= 0){ >+ extStart++; // leading period not included in extension >+ extension = extension.substring(extStart); >+ for (i=0; i < contentTypes.length; i++) { >+ current = contentTypes[i]; >+ if (contains(current.extension, extension)){ >+ best = current; >+ break; >+ } >+ } >+ extStart = extension.indexOf('.'); //$NON-NLS-0$ >+ } >+ } >+ >+ return best; > } > > function array(obj) { >diff --git a/bundles/org.eclipse.orion.client.ui/web/js-tests/ui/contentTypes/contentTypesTests.js b/bundles/org.eclipse.orion.client.ui/web/js-tests/ui/contentTypes/contentTypesTests.js >index 6b347de..e949459 100644 >--- a/bundles/org.eclipse.orion.client.ui/web/js-tests/ui/contentTypes/contentTypesTests.js >+++ b/bundles/org.eclipse.orion.client.ui/web/js-tests/ui/contentTypes/contentTypesTests.js >@@ -61,12 +61,20 @@ > }, { > id: 'orion/test3', > name: 'Basic 3', >- filename: ['build.xml'] >+ filename: ['garbage', 'build.xml'] > }, { > id: 'orion/test4', > name: 'Basic 4', > image: 'http://example.org/foo.png', > imageClass: 'imageFoo' >+ }, { >+ id: 'orion/test5', >+ name: 'Basic 5', >+ extension: ['file.xml'] >+ }, { >+ id: 'orion/test6', >+ name: 'Basic 6', >+ filename: ['exactfilematch', 'exactfilenamematch'] > } ]; > if (useServiceRegistry) { > dataSource = serviceRegistry = new ServiceRegistry(); >@@ -122,30 +130,41 @@ > getFileContentType: function() { > this.withTestData(function(serviceRegistry, contentTypeService, basicTypes) { > var fileMetadata1 = { >- Name: "aaaaaaaaaaa" >+ Name: "zzzdoesnotmatchanythingzzz" > }, > fileMetadata2 = { >- Name: "test.file.xml" >+ Name: "test.foo.xml" > }, > fileMetadata3 = { > Name: "test.file.txt" > }, > fileMetadata4 = { > Name: "build.xml" >+ }, >+ fileMetadata5 = { >+ Name: "test.file.xml" >+ }, >+ fileMetadata6 = { >+ Name: "exactfilenamematch" > }; >+ > assertContentTypesEqual(contentTypeService.getFileContentType(fileMetadata1), null, "No content type for unrecognized file"); >- assertContentTypesEqual(contentTypeService.getFileContentType(fileMetadata2), basicTypes[2]); >- assertContentTypesEqual(contentTypeService.getFileContentType(fileMetadata3), basicTypes[2]); >- assertContentTypesEqual(contentTypeService.getFileContentType(fileMetadata4), basicTypes[3], "filename match beats extension match"); >+ assertContentTypesEqual(contentTypeService.getFileContentType(fileMetadata2), basicTypes[2], "Extension match"); >+ assertContentTypesEqual(contentTypeService.getFileContentType(fileMetadata3), basicTypes[2], "Extension match"); >+ assertContentTypesEqual(contentTypeService.getFileContentType(fileMetadata4), basicTypes[3], "Filename match beats extension match"); >+ assertContentTypesEqual(contentTypeService.getFileContentType(fileMetadata5), basicTypes[5], "Filename match"); >+ assertContentTypesEqual(contentTypeService.getFileContentType(fileMetadata6), basicTypes[6], "Extension match takes longest extension"); > }); > }, > > getFilenameContentType: function() { > this.withTestData(function(serviceRegistry, contentTypeService, basicTypes) { >- assertContentTypesEqual(contentTypeService.getFilenameContentType("aaaaaaa"), null, "No content type for unrecognized file"); >- assertContentTypesEqual(contentTypeService.getFilenameContentType("test.file.xml"), basicTypes[2]); >- assertContentTypesEqual(contentTypeService.getFilenameContentType("test.file.txt"), basicTypes[2]); >- assertContentTypesEqual(contentTypeService.getFilenameContentType("build.xml"), basicTypes[3], "filename match beats extension match"); >+ assertContentTypesEqual(contentTypeService.getFilenameContentType("zzzdoesnotmatchanythingzzz"), null, "No content type for unrecognized file"); >+ assertContentTypesEqual(contentTypeService.getFilenameContentType("test.foo.xml"), basicTypes[2], "Extension match"); >+ assertContentTypesEqual(contentTypeService.getFilenameContentType("test.file.txt"), basicTypes[2], "Extension match"); >+ assertContentTypesEqual(contentTypeService.getFilenameContentType("build.xml"), basicTypes[3], "Filename match beats extension match"); >+ assertContentTypesEqual(contentTypeService.getFilenameContentType("test.file.xml"), basicTypes[5], "Filename match"); >+ assertContentTypesEqual(contentTypeService.getFilenameContentType("exactfilenamematch"), basicTypes[6], "Extension match takes longest extension"); > }); > }, >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 426183
: 247175