本文整理汇总了C++中URL类的典型用法代码示例。如果您正苦于以下问题:C++ URL类的具体用法?C++ URL怎么用?C++ URL使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了URL类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: open
void XMLHttpRequest::open(const String& method, const URL& url, bool async, ExceptionCode& ec)
{
if (!internalAbort())
return;
State previousState = m_state;
m_state = UNSENT;
m_error = false;
m_uploadComplete = false;
// clear stuff from possible previous load
clearResponse();
clearRequest();
ASSERT(m_state == UNSENT);
if (!isValidHTTPToken(method)) {
ec = SYNTAX_ERR;
return;
}
if (!isAllowedHTTPMethod(method)) {
ec = SECURITY_ERR;
return;
}
// FIXME: Convert this to check the isolated world's Content Security Policy once webkit.org/b/104520 is solved.
bool shouldBypassMainWorldContentSecurityPolicy = false;
if (is<Document>(*scriptExecutionContext())) {
Document& document = downcast<Document>(*scriptExecutionContext());
if (document.frame())
shouldBypassMainWorldContentSecurityPolicy = document.frame()->script().shouldBypassMainWorldContentSecurityPolicy();
}
if (!shouldBypassMainWorldContentSecurityPolicy && !scriptExecutionContext()->contentSecurityPolicy()->allowConnectToSource(url)) {
// FIXME: Should this be throwing an exception?
ec = SECURITY_ERR;
return;
}
if (!async && scriptExecutionContext()->isDocument()) {
if (document()->settings() && !document()->settings()->syncXHRInDocumentsEnabled()) {
logConsoleError(scriptExecutionContext(), "Synchronous XMLHttpRequests are disabled for this page.");
ec = INVALID_ACCESS_ERR;
return;
}
// Newer functionality is not available to synchronous requests in window contexts, as a spec-mandated
// attempt to discourage synchronous XHR use. responseType is one such piece of functionality.
// We'll only disable this functionality for HTTP(S) requests since sync requests for local protocols
// such as file: and data: still make sense to allow.
if (url.protocolIsInHTTPFamily() && m_responseTypeCode != ResponseTypeDefault) {
logConsoleError(scriptExecutionContext(), "Synchronous HTTP(S) requests made from the window context cannot have XMLHttpRequest.responseType set.");
ec = INVALID_ACCESS_ERR;
return;
}
#if ENABLE(XHR_TIMEOUT)
// Similarly, timeouts are disabled for synchronous requests as well.
if (m_timeoutMilliseconds > 0) {
logConsoleError(scriptExecutionContext(), "Synchronous XMLHttpRequests must not have a timeout value set.");
ec = INVALID_ACCESS_ERR;
return;
}
#endif
}
m_method = uppercaseKnownHTTPMethod(method);
m_url = url;
m_async = async;
ASSERT(!m_loader);
// Check previous state to avoid dispatching readyState event
// when calling open several times in a row.
if (previousState != OPENED)
changeState(OPENED);
else
m_state = OPENED;
}
示例2: logCanCacheFrameDecision
static unsigned logCanCacheFrameDecision(Frame& frame, DiagnosticLoggingClient& diagnosticLoggingClient, unsigned indentLevel)
{
PCLOG("+---");
if (!frame.isMainFrame() && frame.loader().state() == FrameStateProvisional) {
PCLOG(" -Frame is in provisional load stage");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::provisionalLoadKey());
return 1 << IsInProvisionalLoadStage;
}
if (!frame.loader().documentLoader()) {
PCLOG(" -There is no DocumentLoader object");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::noDocumentLoaderKey());
return 1 << NoDocumentLoader;
}
URL currentURL = frame.loader().documentLoader()->url();
URL newURL = frame.loader().provisionalDocumentLoader() ? frame.loader().provisionalDocumentLoader()->url() : URL();
if (!newURL.isEmpty())
PCLOG(" Determining if frame can be cached navigating from (", currentURL.string(), ") to (", newURL.string(), "):");
else
PCLOG(" Determining if subframe with URL (", currentURL.string(), ") can be cached:");
unsigned rejectReasons = 0;
if (!frame.loader().documentLoader()->mainDocumentError().isNull()) {
PCLOG(" -Main document has an error");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::mainDocumentErrorKey());
if (frame.loader().documentLoader()->mainDocumentError().isCancellation() && frame.loader().documentLoader()->subresourceLoadersArePageCacheAcceptable())
PCLOG(" -But, it was a cancellation and all loaders during the cancelation were loading images or XHR.");
else
rejectReasons |= 1 << MainDocumentError;
}
if (frame.loader().documentLoader()->substituteData().isValid() && frame.loader().documentLoader()->substituteData().failingURL().isEmpty()) {
PCLOG(" -Frame is an error page");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::isErrorPageKey());
rejectReasons |= 1 << IsErrorPage;
}
if (frame.loader().subframeLoader().containsPlugins() && !frame.page()->settings().pageCacheSupportsPlugins()) {
PCLOG(" -Frame contains plugins");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::hasPluginsKey());
rejectReasons |= 1 << HasPlugins;
}
if (frame.isMainFrame() && frame.document()->url().protocolIs("https") && frame.loader().documentLoader()->response().cacheControlContainsNoStore()) {
PCLOG(" -Frame is HTTPS, and cache control prohibits storing");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::httpsNoStoreKey());
rejectReasons |= 1 << IsHttpsAndCacheControlled;
}
if (frame.isMainFrame() && !frame.loader().history().currentItem()) {
PCLOG(" -Main frame has no current history item");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::noCurrentHistoryItemKey());
rejectReasons |= 1 << NoHistoryItem;
}
if (frame.loader().quickRedirectComing()) {
PCLOG(" -Quick redirect is coming");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::quirkRedirectComingKey());
rejectReasons |= 1 << QuickRedirectComing;
}
if (frame.loader().documentLoader()->isLoading()) {
PCLOG(" -DocumentLoader is still loading");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::isLoadingKey());
rejectReasons |= 1 << IsLoading;
}
if (frame.loader().documentLoader()->isStopping()) {
PCLOG(" -DocumentLoader is in the middle of stopping");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::documentLoaderStoppingKey());
rejectReasons |= 1 << IsStopping;
}
Vector<ActiveDOMObject*> unsuspendableObjects;
if (!frame.document()->canSuspendActiveDOMObjectsForPageCache(&unsuspendableObjects)) {
PCLOG(" -The document cannot suspend its active DOM Objects");
for (auto* activeDOMObject : unsuspendableObjects) {
PCLOG(" - Unsuspendable: ", activeDOMObject->activeDOMObjectName());
diagnosticLoggingClient.logDiagnosticMessageWithValue(DiagnosticLoggingKeys::pageCacheKey(), DiagnosticLoggingKeys::unsuspendableDOMObjectKey(), activeDOMObject->activeDOMObjectName(), ShouldSample::Yes);
UNUSED_PARAM(activeDOMObject);
}
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::cannotSuspendActiveDOMObjectsKey());
rejectReasons |= 1 << CannotSuspendActiveDOMObjects;
}
if (!frame.loader().documentLoader()->applicationCacheHost()->canCacheInPageCache()) {
PCLOG(" -The DocumentLoader uses an application cache");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::applicationCacheKey());
rejectReasons |= 1 << DocumentLoaderUsesApplicationCache;
}
if (!frame.loader().client().canCachePage()) {
PCLOG(" -The client says this frame cannot be cached");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::deniedByClientKey());
rejectReasons |= 1 << ClientDeniesCaching;
}
for (Frame* child = frame.tree().firstChild(); child; child = child->tree().nextSibling())
rejectReasons |= logCanCacheFrameDecision(*child, diagnosticLoggingClient, indentLevel + 1);
PCLOG(rejectReasons ? " Frame CANNOT be cached" : " Frame CAN be cached");
PCLOG("+---");
return rejectReasons;
}
示例3: pageCache
void HistoryItem::setURL(const URL& url)
{
pageCache()->remove(this);
setURLString(url.string());
clearDocumentState();
}
示例4: LOG
void IconController::commitToDatabase(const URL& icon)
{
LOG(IconDatabase, "Committing iconURL %s to database for pageURLs %s and %s", icon.string().ascii().data(), m_frame->document()->url().string().ascii().data(), m_frame->loader().initialRequest().url().string().ascii().data());
iconDatabase().setIconURLForPageURL(icon.string(), m_frame->document()->url().string());
iconDatabase().setIconURLForPageURL(icon.string(), m_frame->loader().initialRequest().url().string());
}
示例5: setURL
void WebSocketHandshake::setURL(const URL& url)
{
m_url = url.copy();
}
示例6: ASSERT
void HTMLLinkElement::process()
{
if (!inDocument() || m_isInShadowTree) {
ASSERT(!m_sheet);
return;
}
URL url = getNonEmptyURLAttribute(hrefAttr);
if (!m_linkLoader.loadLink(m_relAttribute, url, attributeWithoutSynchronization(asAttr), attributeWithoutSynchronization(crossoriginAttr), document()))
return;
bool treatAsStyleSheet = m_relAttribute.isStyleSheet
|| (document().settings() && document().settings()->treatsAnyTextCSSLinkAsStylesheet() && m_type.containsIgnoringASCIICase("text/css"));
if (m_disabledState != Disabled && treatAsStyleSheet && document().frame() && url.isValid()) {
AtomicString charset = attributeWithoutSynchronization(charsetAttr);
if (charset.isEmpty() && document().frame())
charset = document().charset();
if (m_cachedSheet) {
removePendingSheet();
m_cachedSheet->removeClient(this);
m_cachedSheet = nullptr;
}
if (!shouldLoadLink())
return;
m_loading = true;
bool mediaQueryMatches = true;
if (!m_media.isEmpty()) {
Optional<RenderStyle> documentStyle;
if (document().hasLivingRenderTree())
documentStyle = Style::resolveForDocument(document());
auto media = MediaQuerySet::createAllowingDescriptionSyntax(m_media);
mediaQueryMatches = MediaQueryEvaluator { document().frame()->view()->mediaType(), document(), documentStyle ? &*documentStyle : nullptr }.evaluate(media.get());
}
// Don't hold up render tree construction and script execution on stylesheets
// that are not needed for the rendering at the moment.
bool isActive = mediaQueryMatches && !isAlternate();
addPendingSheet(isActive ? ActiveSheet : InactiveSheet);
// Load stylesheets that are not needed for the rendering immediately with low priority.
Optional<ResourceLoadPriority> priority;
if (!isActive)
priority = ResourceLoadPriority::VeryLow;
CachedResourceRequest request(url, charset, priority);
request.setInitiator(this);
if (document().contentSecurityPolicy()->allowStyleWithNonce(attributeWithoutSynchronization(HTMLNames::nonceAttr))) {
ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions();
options.contentSecurityPolicyImposition = ContentSecurityPolicyImposition::SkipPolicyCheck;
request.setOptions(options);
}
request.setAsPotentiallyCrossOrigin(crossOrigin(), document());
m_cachedSheet = document().cachedResourceLoader().requestCSSStyleSheet(request);
if (m_cachedSheet)
m_cachedSheet->addClient(this);
else {
// The request may have been denied if (for example) the stylesheet is local and the document is remote.
m_loading = false;
removePendingSheet();
}
} else if (m_sheet) {
// we no longer contain a stylesheet, e.g. perhaps rel or type was changed
clearSheet();
document().styleResolverChanged(DeferRecalcStyle);
}
}
示例7: GetFramesDocument
/* virtual */ ES_PutState
JS_Location::PutName(OpAtom property_name, ES_Value* value, ES_Runtime* origining_runtime)
{
if (GetName(property_name, NULL, origining_runtime) != GET_SUCCESS)
return PUT_FAILED;
FramesDocument *frames_doc = GetFramesDocument();
if (!frames_doc)
return PUT_SUCCESS;
if (value->type != VALUE_STRING)
return PUT_NEEDS_STRING;
const uni_char *value_string = value->value.string;
while (value_string[0] == ' ')
++value_string;
if (property_name == OP_ATOM_href)
if (value_string[0] == '#')
property_name = OP_ATOM_hash;
else if (value_string[0] == '?')
property_name = OP_ATOM_search;
URL url;
DocumentReferrer ref_url(GetStandardRefURL(frames_doc, origining_runtime));
TempBuffer buffer;
URL current_url = ref_url.url;
#ifdef SELFTEST
if (!do_navigation)
current_url = this->current_url;
#endif // SELFTEST
switch (property_name)
{
case OP_ATOM_href:
case OP_ATOM_protocol:
case OP_ATOM_host:
case OP_ATOM_hostname:
case OP_ATOM_port:
case OP_ATOM_pathname:
BOOL allowed;
if (OpStatus::IsError(OpSecurityManager::CheckSecurity(OpSecurityManager::DOM_ALLOWED_TO_NAVIGATE, static_cast<DOM_Runtime *>(origining_runtime), GetRuntime(), allowed)) ||
!allowed)
return PUT_SECURITY_VIOLATION;
}
switch (property_name)
{
case OP_ATOM_protocol:
{
unsigned length = uni_strlen(value_string);
while (length > 0 && value_string[length - 1] == ':')
length--;
if (length > 0)
{
const uni_char *current_url_string = current_url.GetAttribute(URL::KUniName_Username_Password_NOT_FOR_UI).CStr();
const uni_char *current_scheme_end = uni_strchr(current_url_string, ':');
if (!current_scheme_end)
return PUT_SUCCESS;
PUT_FAILED_IF_ERROR(buffer.Append(value_string, length));
PUT_FAILED_IF_ERROR(buffer.Append(current_scheme_end));
url = GetEncodedURL(origining_runtime->GetFramesDocument(), buffer.GetStorage());
BOOL allowed;
if (url.Type() == URL_JAVASCRIPT)
if (OpStatus::IsError(OpSecurityManager::CheckSecurity(OpSecurityManager::DOM_STANDARD, static_cast<DOM_Runtime *>(origining_runtime), GetRuntime(), allowed)) ||
!allowed)
return PUT_SUCCESS;
}
break;
}
case OP_ATOM_host:
{
const uni_char *current_url_string = current_url.GetAttribute(URL::KUniName_Username_Password_NOT_FOR_UI).CStr();
const uni_char *current_scheme_end = uni_strchr(current_url_string, ':');
// URL must be an "authority-based URL"
if (current_scheme_end && current_scheme_end[1] == '/' && current_scheme_end[2] == '/')
{
OpString hostname;
PUT_FAILED_IF_ERROR(current_url.GetAttribute(URL::KUniHostName, hostname));
/* Just bail if the URL doesn't have a hostname after all. */
if (!hostname.CStr())
return PUT_SUCCESS;
uni_char *hostname_start = uni_strstr(current_url_string, hostname.CStr());
OP_ASSERT(hostname_start);
uni_char *hostname_end = hostname_start + hostname.Length();
unsigned short port = current_url.GetAttribute(URL::KServerPort);
if (port > 0 && *hostname_end == ':')
{
hostname_end++;
while (uni_isdigit(*hostname_end))
hostname_end++;
}
//.........这里部分代码省略.........
示例8: u_test
bool u_test(URL test, string p, string h, string po, string d="", string u="", string pa="", string i="") {
if(test.get_protocol() != p) { test.dump(); return fail("protocol", p, test.get_protocol()); }
if(test.get_host() != h) { test.dump(); return fail("host", h, test.get_host()); }
if(test.get_port() != po) { test.dump(); return fail("port", po, test.get_port()); }
if(test.get_user() != u) { test.dump(); return fail("user", u, test.get_user()); }
if(test.get_params() != pa) { test.dump(); return fail("params", pa, test.get_params()); }
if(test.get_destination() != d) { test.dump(); return fail("destination/path", d, test.get_destination()); }
if(test.get_index() != i) { test.dump(); return fail("index/hash", i, test.get_index()); }
}
示例9: logWarning
void MixedContentChecker::logWarning(bool allowed, const String& action, const URL& target) const
{
String message = makeString((allowed ? "" : "[blocked] "), "The page at ", m_frame.document()->url().stringCenterEllipsizedToLength(), " ", action, " insecure content from ", target.stringCenterEllipsizedToLength(), ".\n");
m_frame.document()->addConsoleMessage(MessageSource::Security, MessageLevel::Warning, message);
}
示例10: uni_stristr
OP_STATUS ContentBlockFilterCreation::CreateFilterFromURL(URL& homeurl, const uni_char *url, OpString& result)
{
if(uni_stristr(url, (const char *)"*"))
{
return result.Set(url);
}
/*
** Start of code to create patterned URLs to block
*/
// handle flash: http://flash.vg.no/annonser/startour/startour_restplass.swf
const uni_char *swf = NULL;
swf = uni_stristr(url, (const char *)"swf");
if(swf == NULL)
{
swf = url + uni_strlen(url);
}
if(swf)
{
while(swf-- != url)
{
// search back to the last slash
if(*swf == '/')
{
swf++;
break;
}
}
if(swf != url)
{
// we should now have http://flash.vg.no/annonser/startour/*
// let's see if we can shorten it down a bit
int count = CountCharacters(url, '/', swf - url);
if(count > 4)
{
swf--;
// too long path, let's shorten it down to 2 levels (after http://)
while(swf-- != url)
{
// search back to the last slash
if(*swf == '/')
{
if(--count == 4)
{
swf++;
break;
}
}
}
}
result.Empty();
if(count < 4)
{
if(OpStatus::IsError(result.Append(url)))
{
return OpStatus::ERR_NO_MEMORY;
}
}
else
{
if(OpStatus::IsError(result.Append(url, swf - url)))
{
return OpStatus::ERR_NO_MEMORY;
}
}
BOOL go_on = TRUE;
while(go_on)
{
OpString homeurl_string;
RETURN_IF_ERROR(homeurl.GetAttribute(URL::KUniName_Username_Password_Hidden, homeurl_string));
if(result.Compare(homeurl_string.CStr(), result.Length()) == 0)
{
BOOL slash_found = FALSE;
// matches main page url, we can't have that
while(*swf++)
{
// search back to the last slash
if(*swf == '/')
{
swf++;
result.Empty();
if(OpStatus::IsError(result.Append(url, swf - url)))
{
return OpStatus::ERR_NO_MEMORY;
}
slash_found = TRUE;
break;
}
}
if(!slash_found)
{
result.Empty();
if(OpStatus::IsError(result.Append(url, swf - url)))
{
return OpStatus::ERR_NO_MEMORY;
}
go_on = FALSE;
//.........这里部分代码省略.........
示例11: CookieLog
void CookieManager::getRawCookies(Vector<RefPtr<ParsedCookie> > &stackOfCookies, const URL& requestURL, CookieFilter filter) const
{
// Force a sync load of the database
if (!m_syncedWithDatabase && !m_privateMode)
m_cookieBackingStore->openAndLoadDatabaseSynchronously(cookieJar());
CookieLog("CookieManager - getRawCookies - processing url with domain - %s & protocol: %s & path: %s\n", requestURL.host().utf8().data(), requestURL.protocol().utf8().data(), requestURL.path().utf8().data());
const bool invalidScheme = shouldIgnoreScheme(requestURL.protocol());
const bool specialCaseForWebWorks = invalidScheme && m_shouldDumpAllCookies;
const bool isConnectionSecure = requestURL.protocolIs("https") || requestURL.protocolIs("wss") || specialCaseForWebWorks;
Vector<RefPtr<ParsedCookie> > cookieCandidates;
Vector<CookieMap*> protocolsToSearch;
// Special Case: If a server sets a "secure" cookie over a non-secure channel and tries to access the cookie
// over a secure channel, it will not succeed because the secure protocol isn't mapped to the insecure protocol yet.
// Set the map to the non-secure version, so it'll search the mapping for a secure cookie.
CookieMap* targetMap = m_managerMap.get(requestURL.protocol());
if (!targetMap && isConnectionSecure) {
CookieLog("CookieManager - special case: secure protocol are not linked yet.");
if (requestURL.protocolIs("https"))
targetMap = m_managerMap.get("http");
else if (requestURL.protocolIs("wss"))
targetMap = m_managerMap.get("ws");
}
// Decide which scheme tree we should look at.
// Return on invalid schemes. cookies are currently disabled on file and local.
// We only want to enable them for WebWorks that enabled a special flag.
if (specialCaseForWebWorks)
copyValuesToVector(m_managerMap, protocolsToSearch);
else if (invalidScheme)
return;
else {
protocolsToSearch.append(targetMap);
// FIXME: this is a hack for webworks apps; RFC 6265 says "Cookies do not provide isolation by scheme"
// so we should not be checking protocols at all. See PR 135595
if (m_shouldDumpAllCookies) {
protocolsToSearch.append(m_managerMap.get("file"));
protocolsToSearch.append(m_managerMap.get("local"));
}
}
Vector<String> delimitedHost;
// IP addresses are stored in a particular format (due to ipv6). Reduce the ip address so we can match
// it with the one in memory.
BlackBerry::Platform::String canonicalIP = BlackBerry::Platform::getCanonicalIPFormat(requestURL.host());
if (!canonicalIP.empty())
delimitedHost.append(String(canonicalIP.c_str()));
else
requestURL.host().lower().split(".", true, delimitedHost);
// Go through all the protocol trees that we need to search for
// and get all cookies that are valid for this domain
for (size_t k = 0; k < protocolsToSearch.size(); k++) {
CookieMap* currentMap = protocolsToSearch[k];
// if no cookies exist for this protocol, break right away
if (!currentMap)
continue;
CookieLog("CookieManager - looking at protocol map %s \n", currentMap->getName().utf8().data());
// Special case for local and files - because WebApps expect to get ALL cookies from the backing-store on local protocol
if (specialCaseForWebWorks) {
CookieLog("CookieManager - special case find in protocol map - %s\n", currentMap->getName().utf8().data());
currentMap->getAllChildCookies(&cookieCandidates);
} else {
// Get cookies from the null domain map
currentMap->getAllCookies(&cookieCandidates);
// Get cookies from Host-only cookies
if (canonicalIP.empty()) {
CookieLog("CookieManager - looking for host-only cookies for host - %s", requestURL.host().utf8().data());
CookieMap* hostMap = currentMap->getSubdomainMap(requestURL.host());
if (hostMap)
hostMap->getAllCookies(&cookieCandidates);
}
// Get cookies from the valid domain maps
int i = delimitedHost.size() - 1;
while (i >= 0) {
CookieLog("CookieManager - finding %s in currentmap\n", delimitedHost[i].utf8().data());
currentMap = currentMap->getSubdomainMap(delimitedHost[i]);
// if this subdomain/domain does not exist in our mapping then we simply exit
if (!currentMap) {
CookieLog("CookieManager - cannot find next map exiting the while loop.\n");
break;
}
CookieLog("CookieManager - found the map, grabbing cookies from this map\n");
currentMap->getAllCookies(&cookieCandidates);
i--;
}
}
}
CookieLog("CookieManager - there are %d cookies in candidate\n", cookieCandidates.size());
//.........这里部分代码省略.........
示例12: VerifySignedFile
/** Verify signed file
* The function will return FALSE if signature fails or if any errors occur,
*
* @param signed_file URL containing the file to be verified. MUST be loaded,
* which can be accomplished with signed_file.QuickLoad(TRUE)
* @param signature Base64 encoded signature
*
* @param key Pointer to buffer containing the DER encoded public key associated
* with the private key used to generate the signature, MUST be an
* X509_PUBKEY structure (openssl rsa -pubout ... command result)
* @param key_len Length of the public key buffer
*
* @param alg Algorithm used to calculate signature. Default SSL_SHA
*
* @return TRUE if the verification succeded, FALSE if there was any error.
*/
BOOL VerifySignedFile(URL &signed_file, const OpStringC8 &signature, const unsigned char *key, unsigned long key_len, SSL_HashAlgorithmType alg)
{
if(signed_file.IsEmpty() || (URLStatus) signed_file.GetAttribute(URL::KLoadStatus) != URL_LOADED || key == NULL || key_len == 0)
return FALSE;
// Get The raw data
OpAutoPtr<URL_DataDescriptor> desc(signed_file.GetDescriptor(NULL, TRUE, TRUE, TRUE));
if(!desc.get())
return FALSE;
BOOL more = FALSE;
unsigned long buf_len;
if(desc->RetrieveData(more) == 0 || desc->GetBuffer() == NULL)
return FALSE;
if(desc->GetBufSize() == 0)
return FALSE;
if(signature.Length() <= 0)
return FALSE;
unsigned long signature_len = signature.Length();
SSL_varvector32 signature_in;
signature_in.Resize(signature_len);
if(signature_in.Error())
return FALSE;
unsigned long read_len=0;
BOOL warning= FALSE;
buf_len = GeneralDecodeBase64((unsigned char *)signature.CStr(), signature_len, read_len, signature_in.GetDirect(), warning);
if(warning || read_len != signature_len || buf_len == 0)
return FALSE;
signature_in.Resize(buf_len);
SSL_Hash_Pointer digester(alg);
if(digester.Error())
return FALSE;
digester->InitHash();
do {
more = FALSE;
buf_len = desc->RetrieveData(more);
digester->CalculateHash((unsigned char *)desc->GetBuffer(), buf_len);
desc->ConsumeData(buf_len);
} while(more);
SSL_varvector32 signature_out;
digester->ExtractHash(signature_out);
if(digester->Error() || signature_out.Error())
return FALSE;
OpAutoPtr<SSL_PublicKeyCipher> signature_checker;
OP_STATUS op_err = OpStatus::OK;
signature_checker.reset(g_ssl_api->CreatePublicKeyCipher(SSL_RSA, op_err));
if(OpStatus::IsError(op_err) || signature_checker.get() == NULL)
return FALSE;
SSL_varvector32 pubkey_bin_ex;
pubkey_bin_ex.SetExternal((unsigned char *) key);
pubkey_bin_ex.Resize(key_len);
signature_checker->LoadAllKeys(pubkey_bin_ex);
if(signature_checker->Error())
return FALSE;
if(alg == SSL_SHA)
{
if(!signature_checker->Verify(signature_out.GetDirect(), signature_out.GetLength(), signature_in.GetDirect(), signature_in.GetLength()))
return FALSE;
//.........这里部分代码省略.........
示例13: VerifyChecksum
/** Verify checksum
* The function will return FALSE if verification fails or if any errors occur,
*
* @param signed_file URL containing the file to be verified. MUST be loaded,
* which can be accomplished with signed_file.QuickLoad(TRUE)
* @param checksum Base64 encoded checksum
*
* @param alg Algorithm used to calculate checksum. Default SSL_SHA
*
* @return TRUE if the verification succeded, FALSE if there was any error.
*/
BOOL VerifyChecksum(URL &signed_file, const OpStringC8 &checksum, SSL_HashAlgorithmType alg)
{
if(signed_file.IsEmpty() || (URLStatus) signed_file.GetAttribute(URL::KLoadStatus) != URL_LOADED)
return FALSE;
// Get The raw data
OpAutoPtr<URL_DataDescriptor> desc(signed_file.GetDescriptor(NULL, TRUE, TRUE, TRUE));
if(!desc.get())
return FALSE;
BOOL more = FALSE;
unsigned long buf_len;
if(desc->RetrieveData(more) == 0 || desc->GetBuffer() == NULL)
return FALSE;
if(desc->GetBufSize() == 0)
return FALSE;
SSL_Hash_Pointer digester(alg);
if(digester.Error())
return FALSE;
digester->InitHash();
do {
more = FALSE;
buf_len = desc->RetrieveData(more);
digester->CalculateHash((unsigned char *)desc->GetBuffer(), buf_len);
desc->ConsumeData(buf_len);
} while(more);
SSL_varvector32 signature_out;
digester->ExtractHash(signature_out);
if(digester->Error() || signature_out.Error())
return FALSE;
#ifdef _DEBUG
OpString8 s8;
OP_STATUS retval = ByteToHexStr(signature_out.GetDirect(), signature_out.GetLength(), s8);
OP_ASSERT(retval == OpStatus::OK);
#endif
byte* byte_buffer = NULL;
unsigned int buffer_len = 0;
OP_STATUS ret = HexStrToByte(checksum, byte_buffer, buffer_len);
if(OpStatus::IsError(ret))
return FALSE;
SSL_varvector32 signature_in;
signature_in.Set(byte_buffer, buffer_len);
OP_DELETEA(byte_buffer);
return signature_in == signature_out;
}
示例14: logCanCachePageDecision
static void logCanCachePageDecision(Page& page)
{
// Only bother logging for main frames that have actually loaded and have content.
if (page.mainFrame().loader().stateMachine().creatingInitialEmptyDocument())
return;
URL currentURL = page.mainFrame().loader().documentLoader() ? page.mainFrame().loader().documentLoader()->url() : URL();
if (currentURL.isEmpty())
return;
unsigned indentLevel = 0;
PCLOG("--------\n Determining if page can be cached:");
unsigned rejectReasons = 0;
MainFrame& mainFrame = page.mainFrame();
DiagnosticLoggingClient& diagnosticLoggingClient = mainFrame.diagnosticLoggingClient();
unsigned frameRejectReasons = logCanCacheFrameDecision(mainFrame, diagnosticLoggingClient, indentLevel + 1);
if (frameRejectReasons)
rejectReasons |= 1 << FrameCannotBeInPageCache;
if (!page.settings().usesPageCache()) {
PCLOG(" -Page settings says b/f cache disabled");
rejectReasons |= 1 << DisabledPageCache;
}
#if ENABLE(DEVICE_ORIENTATION) && !PLATFORM(IOS)
if (DeviceMotionController::isActiveAt(page)) {
PCLOG(" -Page is using DeviceMotion");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::deviceMotionKey());
rejectReasons |= 1 << UsesDeviceMotion;
}
if (DeviceOrientationController::isActiveAt(page)) {
PCLOG(" -Page is using DeviceOrientation");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::deviceOrientationKey());
rejectReasons |= 1 << UsesDeviceOrientation;
}
#endif
#if ENABLE(PROXIMITY_EVENTS)
if (DeviceProximityController::isActiveAt(page)) {
PCLOG(" -Page is using DeviceProximity");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, deviceProximityKey);
rejectReasons |= 1 << UsesDeviceMotion;
}
#endif
FrameLoadType loadType = page.mainFrame().loader().loadType();
if (loadType == FrameLoadType::Reload) {
PCLOG(" -Load type is: Reload");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::reloadKey());
rejectReasons |= 1 << IsReload;
}
if (loadType == FrameLoadType::ReloadFromOrigin) {
PCLOG(" -Load type is: Reload from origin");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::reloadFromOriginKey());
rejectReasons |= 1 << IsReloadFromOrigin;
}
if (loadType == FrameLoadType::Same) {
PCLOG(" -Load type is: Same");
logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::sameLoadKey());
rejectReasons |= 1 << IsSameLoad;
}
if (rejectReasons)
PCLOG(" Page CANNOT be cached\n--------");
else
PCLOG(" Page CAN be cached\n--------");
diagnosticLoggingClient.logDiagnosticMessageWithResult(DiagnosticLoggingKeys::pageCacheKey(), emptyString(), rejectReasons ? DiagnosticLoggingResultFail : DiagnosticLoggingResultPass, ShouldSample::Yes);
}
示例15:
// TODO(bmahler): Leverage process::http::URL for equality.
bool operator==(const URL& left, const URL& right)
{
return left.SerializeAsString() == right.SerializeAsString();
}