10617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen/* 20617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * Copyright (C) 2010 Apple Inc. All Rights Reserved. 30617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * 40617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * Redistribution and use in source and binary forms, with or without 50617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * modification, are permitted provided that the following conditions 60617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * are met: 70617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * 1. Redistributions of source code must retain the above copyright 80617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * notice, this list of conditions and the following disclaimer. 90617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * 2. Redistributions in binary form must reproduce the above copyright 100617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * notice, this list of conditions and the following disclaimer in the 110617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * documentation and/or other materials provided with the distribution. 120617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * 130617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * THIS SOFTWARE IS PROVIDED BY APPLE, INC. ``AS IS'' AND ANY 140617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 150617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 160617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 170617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 180617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 190617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 200617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 210617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 220617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 230617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 240617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * 250617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen */ 260617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "config.h" 270617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "SchemeRegistry.h" 280617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 290617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsennamespace WebCore { 300617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 310617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenstatic URLSchemesMap& localURLSchemes() 320617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 330617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen DEFINE_STATIC_LOCAL(URLSchemesMap, localSchemes, ()); 340617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 350617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen if (localSchemes.isEmpty()) { 360617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen localSchemes.add("file"); 370617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#if PLATFORM(MAC) 380617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen localSchemes.add("applewebdata"); 390617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#endif 400617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#if PLATFORM(QT) 410617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen localSchemes.add("qrc"); 420617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#endif 430617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen } 440617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 450617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return localSchemes; 460617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 470617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic URLSchemesMap& displayIsolatedURLSchemes() 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DEFINE_STATIC_LOCAL(URLSchemesMap, displayIsolatedSchemes, ()); 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return displayIsolatedSchemes; 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 540617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenstatic URLSchemesMap& secureSchemes() 550617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 560617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen DEFINE_STATIC_LOCAL(URLSchemesMap, secureSchemes, ()); 570617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 580617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen if (secureSchemes.isEmpty()) { 590617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen secureSchemes.add("https"); 600617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen secureSchemes.add("about"); 610617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen secureSchemes.add("data"); 620617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen } 630617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 640617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return secureSchemes; 650617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 660617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 670617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenstatic URLSchemesMap& schemesWithUniqueOrigins() 680617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 690617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen DEFINE_STATIC_LOCAL(URLSchemesMap, schemesWithUniqueOrigins, ()); 700617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 710617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen // This is a willful violation of HTML5. 720617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen // See https://bugs.webkit.org/show_bug.cgi?id=11885 730617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen if (schemesWithUniqueOrigins.isEmpty()) 740617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen schemesWithUniqueOrigins.add("data"); 750617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 760617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return schemesWithUniqueOrigins; 770617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 780617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 790617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenstatic URLSchemesMap& emptyDocumentSchemes() 800617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 810617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen DEFINE_STATIC_LOCAL(URLSchemesMap, emptyDocumentSchemes, ()); 820617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 830617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen if (emptyDocumentSchemes.isEmpty()) 840617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen emptyDocumentSchemes.add("about"); 850617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 860617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return emptyDocumentSchemes; 870617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 880617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 892fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockstatic URLSchemesMap& canDisplayOnlyIfCanRequestSchemes() 902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(URLSchemesMap, canDisplayOnlyIfCanRequestSchemes, ()); 922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(BLOB) || ENABLE(FILE_SYSTEM) 942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (canDisplayOnlyIfCanRequestSchemes.isEmpty()) { 952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(BLOB) 962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block canDisplayOnlyIfCanRequestSchemes.add("blob"); 972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(FILE_SYSTEM) 992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block canDisplayOnlyIfCanRequestSchemes.add("filesystem"); 1002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 1012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 1022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif // ENABLE(BLOB) || ENABLE(FILE_SYSTEM) 1032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return canDisplayOnlyIfCanRequestSchemes; 1052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1070617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenvoid SchemeRegistry::registerURLSchemeAsLocal(const String& scheme) 1080617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch localURLSchemes().add(scheme); 1100617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 1110617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 1120617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenvoid SchemeRegistry::removeURLSchemeRegisteredAsLocal(const String& scheme) 1130617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 1140617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen if (scheme == "file") 1150617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return; 1160617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#if PLATFORM(MAC) 1170617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen if (scheme == "applewebdata") 1180617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return; 1190617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#endif 12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch localURLSchemes().remove(scheme); 1210617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 1220617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochconst URLSchemesMap& SchemeRegistry::localSchemes() 1240617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return localURLSchemes(); 1260617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 1270617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 1280617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenbool SchemeRegistry::shouldTreatURLSchemeAsLocal(const String& scheme) 1290617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 1300617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen if (scheme.isEmpty()) 1310617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return false; 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return localURLSchemes().contains(scheme); 1330617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 1340617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 1350617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenvoid SchemeRegistry::registerURLSchemeAsNoAccess(const String& scheme) 1360617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 1370617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen schemesWithUniqueOrigins().add(scheme); 1380617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 1390617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 1400617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenbool SchemeRegistry::shouldTreatURLSchemeAsNoAccess(const String& scheme) 1410617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 1422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (scheme.isEmpty()) 1432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return false; 1440617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return schemesWithUniqueOrigins().contains(scheme); 1450617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 1460617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid SchemeRegistry::registerURLSchemeAsDisplayIsolated(const String& scheme) 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch displayIsolatedURLSchemes().add(scheme); 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated(const String& scheme) 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 1542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (scheme.isEmpty()) 1552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return false; 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return displayIsolatedURLSchemes().contains(scheme); 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1590617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenvoid SchemeRegistry::registerURLSchemeAsSecure(const String& scheme) 1600617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 1610617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen secureSchemes().add(scheme); 1620617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 1630617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 1640617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenbool SchemeRegistry::shouldTreatURLSchemeAsSecure(const String& scheme) 1650617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 1662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (scheme.isEmpty()) 1672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return false; 1680617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return secureSchemes().contains(scheme); 1690617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 1700617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 1710617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenvoid SchemeRegistry::registerURLSchemeAsEmptyDocument(const String& scheme) 1720617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 1730617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen emptyDocumentSchemes().add(scheme); 1740617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 1750617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 1760617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenbool SchemeRegistry::shouldLoadURLSchemeAsEmptyDocument(const String& scheme) 1770617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 1782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (scheme.isEmpty()) 1792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return false; 1800617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return emptyDocumentSchemes().contains(scheme); 1810617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 1820617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 1832fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockbool SchemeRegistry::canDisplayOnlyIfCanRequest(const String& scheme) 1842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (scheme.isEmpty()) 1862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return false; 1872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return canDisplayOnlyIfCanRequestSchemes().contains(scheme); 1882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1902fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest(const String& scheme) 1912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block canDisplayOnlyIfCanRequestSchemes().add(scheme); 1932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1950617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} // namespace WebCore 196