| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  * Copyright (C) 2013 Google Inc. All rights reserved. |    2  * Copyright (C) 2013 Google Inc. All rights reserved. | 
|    3  * |    3  * | 
|    4  * Redistribution and use in source and binary forms, with or without |    4  * Redistribution and use in source and binary forms, with or without | 
|    5  * modification, are permitted provided that the following conditions are |    5  * modification, are permitted provided that the following conditions are | 
|    6  * met: |    6  * met: | 
|    7  * |    7  * | 
|    8  *     * Redistributions of source code must retain the above copyright |    8  *     * Redistributions of source code must retain the above copyright | 
|    9  * notice, this list of conditions and the following disclaimer. |    9  * notice, this list of conditions and the following disclaimer. | 
|   10  *     * Redistributions in binary form must reproduce the above |   10  *     * Redistributions in binary form must reproduce the above | 
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  196     TestCheckSecurityInterfaceV8Internal::doNotCheckSecurityVoidMethodMethod(inf
     o); |  196     TestCheckSecurityInterfaceV8Internal::doNotCheckSecurityVoidMethodMethod(inf
     o); | 
|  197     TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); |  197     TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); | 
|  198 } |  198 } | 
|  199  |  199  | 
|  200 static void doNotCheckSecurityVoidMethodOriginSafeMethodGetter(const v8::Propert
     yCallbackInfo<v8::Value>& info) |  200 static void doNotCheckSecurityVoidMethodOriginSafeMethodGetter(const v8::Propert
     yCallbackInfo<v8::Value>& info) | 
|  201 { |  201 { | 
|  202     // This is only for getting a unique pointer which we can pass to privateTem
     plate. |  202     // This is only for getting a unique pointer which we can pass to privateTem
     plate. | 
|  203     static int privateTemplateUniqueKey; |  203     static int privateTemplateUniqueKey; | 
|  204     WrapperWorldType currentWorldType = worldType(info.GetIsolate()); |  204     WrapperWorldType currentWorldType = worldType(info.GetIsolate()); | 
|  205     V8PerIsolateData* data = V8PerIsolateData::from(info.GetIsolate()); |  205     V8PerIsolateData* data = V8PerIsolateData::from(info.GetIsolate()); | 
|  206     v8::Handle<v8::FunctionTemplate> privateTemplate = data->privateTemplate(cur
     rentWorldType, &privateTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal::
     doNotCheckSecurityVoidMethodMethodCallback, v8Undefined(), v8::Signature::New(V8
     PerIsolateData::from(info.GetIsolate())->rawTemplate(&V8TestCheckSecurityInterfa
     ce::wrapperTypeInfo, currentWorldType)), 0); |  206     v8::Handle<v8::FunctionTemplate> privateTemplate = data->privateTemplate(cur
     rentWorldType, &privateTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal::
     doNotCheckSecurityVoidMethodMethodCallback, v8Undefined(), v8::Signature::New(in
     fo.GetIsolate(), V8PerIsolateData::from(info.GetIsolate())->rawTemplate(&V8TestC
     heckSecurityInterface::wrapperTypeInfo, currentWorldType)), 0); | 
|  207  |  207  | 
|  208     v8::Handle<v8::Object> holder = info.This()->FindInstanceInPrototypeChain(V8
     TestCheckSecurityInterface::GetTemplate(info.GetIsolate(), currentWorldType)); |  208     v8::Handle<v8::Object> holder = info.This()->FindInstanceInPrototypeChain(V8
     TestCheckSecurityInterface::GetTemplate(info.GetIsolate(), currentWorldType)); | 
|  209     if (holder.IsEmpty()) { |  209     if (holder.IsEmpty()) { | 
|  210         // This is only reachable via |object.__proto__.func|, in which case it |  210         // This is only reachable via |object.__proto__.func|, in which case it | 
|  211         // has already passed the same origin security check |  211         // has already passed the same origin security check | 
|  212         v8SetReturnValue(info, privateTemplate->GetFunction()); |  212         v8SetReturnValue(info, privateTemplate->GetFunction()); | 
|  213         return; |  213         return; | 
|  214     } |  214     } | 
|  215     TestCheckSecurityInterface* imp = V8TestCheckSecurityInterface::toNative(hol
     der); |  215     TestCheckSecurityInterface* imp = V8TestCheckSecurityInterface::toNative(hol
     der); | 
|  216     if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame(), DoNotReportSecu
     rityError)) { |  216     if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame(), DoNotReportSecu
     rityError)) { | 
|  217         static int sharedTemplateUniqueKey; |  217         static int sharedTemplateUniqueKey; | 
|  218         v8::Handle<v8::FunctionTemplate> sharedTemplate = data->privateTemplate(
     currentWorldType, &sharedTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal
     ::doNotCheckSecurityVoidMethodMethodCallback, v8Undefined(), v8::Signature::New(
     V8PerIsolateData::from(info.GetIsolate())->rawTemplate(&V8TestCheckSecurityInter
     face::wrapperTypeInfo, currentWorldType)), 0); |  218         v8::Handle<v8::FunctionTemplate> sharedTemplate = data->privateTemplate(
     currentWorldType, &sharedTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal
     ::doNotCheckSecurityVoidMethodMethodCallback, v8Undefined(), v8::Signature::New(
     info.GetIsolate(), V8PerIsolateData::from(info.GetIsolate())->rawTemplate(&V8Tes
     tCheckSecurityInterface::wrapperTypeInfo, currentWorldType)), 0); | 
|  219         v8SetReturnValue(info, sharedTemplate->GetFunction()); |  219         v8SetReturnValue(info, sharedTemplate->GetFunction()); | 
|  220         return; |  220         return; | 
|  221     } |  221     } | 
|  222  |  222  | 
|  223     v8::Local<v8::Value> hiddenValue = info.This()->GetHiddenValue(v8::String::N
     ewSymbol("doNotCheckSecurityVoidMethod")); |  223     v8::Local<v8::Value> hiddenValue = info.This()->GetHiddenValue(v8::String::N
     ewFromUtf8(info.GetIsolate(), "doNotCheckSecurityVoidMethod", v8::String::kInter
     nalizedString)); | 
|  224     if (!hiddenValue.IsEmpty()) { |  224     if (!hiddenValue.IsEmpty()) { | 
|  225         v8SetReturnValue(info, hiddenValue); |  225         v8SetReturnValue(info, hiddenValue); | 
|  226         return; |  226         return; | 
|  227     } |  227     } | 
|  228  |  228  | 
|  229     v8SetReturnValue(info, privateTemplate->GetFunction()); |  229     v8SetReturnValue(info, privateTemplate->GetFunction()); | 
|  230 } |  230 } | 
|  231  |  231  | 
|  232 static void doNotCheckSecurityVoidMethodOriginSafeMethodGetterCallback(v8::Local
     <v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info) |  232 static void doNotCheckSecurityVoidMethodOriginSafeMethodGetterCallback(v8::Local
     <v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info) | 
|  233 { |  233 { | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
|  248     TestCheckSecurityInterfaceV8Internal::doNotCheckSecurityPerWorldBindingsVoid
     MethodMethod(info); |  248     TestCheckSecurityInterfaceV8Internal::doNotCheckSecurityPerWorldBindingsVoid
     MethodMethod(info); | 
|  249     TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); |  249     TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); | 
|  250 } |  250 } | 
|  251  |  251  | 
|  252 static void doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetter(c
     onst v8::PropertyCallbackInfo<v8::Value>& info) |  252 static void doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetter(c
     onst v8::PropertyCallbackInfo<v8::Value>& info) | 
|  253 { |  253 { | 
|  254     // This is only for getting a unique pointer which we can pass to privateTem
     plate. |  254     // This is only for getting a unique pointer which we can pass to privateTem
     plate. | 
|  255     static int privateTemplateUniqueKey; |  255     static int privateTemplateUniqueKey; | 
|  256     WrapperWorldType currentWorldType = worldType(info.GetIsolate()); |  256     WrapperWorldType currentWorldType = worldType(info.GetIsolate()); | 
|  257     V8PerIsolateData* data = V8PerIsolateData::from(info.GetIsolate()); |  257     V8PerIsolateData* data = V8PerIsolateData::from(info.GetIsolate()); | 
|  258     v8::Handle<v8::FunctionTemplate> privateTemplate = data->privateTemplate(cur
     rentWorldType, &privateTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal::
     doNotCheckSecurityPerWorldBindingsVoidMethodMethodCallback, v8Undefined(), v8::S
     ignature::New(V8PerIsolateData::from(info.GetIsolate())->rawTemplate(&V8TestChec
     kSecurityInterface::wrapperTypeInfo, currentWorldType)), 0); |  258     v8::Handle<v8::FunctionTemplate> privateTemplate = data->privateTemplate(cur
     rentWorldType, &privateTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal::
     doNotCheckSecurityPerWorldBindingsVoidMethodMethodCallback, v8Undefined(), v8::S
     ignature::New(info.GetIsolate(), V8PerIsolateData::from(info.GetIsolate())->rawT
     emplate(&V8TestCheckSecurityInterface::wrapperTypeInfo, currentWorldType)), 0); | 
|  259  |  259  | 
|  260     v8::Handle<v8::Object> holder = info.This()->FindInstanceInPrototypeChain(V8
     TestCheckSecurityInterface::GetTemplate(info.GetIsolate(), currentWorldType)); |  260     v8::Handle<v8::Object> holder = info.This()->FindInstanceInPrototypeChain(V8
     TestCheckSecurityInterface::GetTemplate(info.GetIsolate(), currentWorldType)); | 
|  261     if (holder.IsEmpty()) { |  261     if (holder.IsEmpty()) { | 
|  262         // This is only reachable via |object.__proto__.func|, in which case it |  262         // This is only reachable via |object.__proto__.func|, in which case it | 
|  263         // has already passed the same origin security check |  263         // has already passed the same origin security check | 
|  264         v8SetReturnValue(info, privateTemplate->GetFunction()); |  264         v8SetReturnValue(info, privateTemplate->GetFunction()); | 
|  265         return; |  265         return; | 
|  266     } |  266     } | 
|  267     TestCheckSecurityInterface* imp = V8TestCheckSecurityInterface::toNative(hol
     der); |  267     TestCheckSecurityInterface* imp = V8TestCheckSecurityInterface::toNative(hol
     der); | 
|  268     if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame(), DoNotReportSecu
     rityError)) { |  268     if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame(), DoNotReportSecu
     rityError)) { | 
|  269         static int sharedTemplateUniqueKey; |  269         static int sharedTemplateUniqueKey; | 
|  270         v8::Handle<v8::FunctionTemplate> sharedTemplate = data->privateTemplate(
     currentWorldType, &sharedTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal
     ::doNotCheckSecurityPerWorldBindingsVoidMethodMethodCallback, v8Undefined(), v8:
     :Signature::New(V8PerIsolateData::from(info.GetIsolate())->rawTemplate(&V8TestCh
     eckSecurityInterface::wrapperTypeInfo, currentWorldType)), 0); |  270         v8::Handle<v8::FunctionTemplate> sharedTemplate = data->privateTemplate(
     currentWorldType, &sharedTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal
     ::doNotCheckSecurityPerWorldBindingsVoidMethodMethodCallback, v8Undefined(), v8:
     :Signature::New(info.GetIsolate(), V8PerIsolateData::from(info.GetIsolate())->ra
     wTemplate(&V8TestCheckSecurityInterface::wrapperTypeInfo, currentWorldType)), 0)
     ; | 
|  271         v8SetReturnValue(info, sharedTemplate->GetFunction()); |  271         v8SetReturnValue(info, sharedTemplate->GetFunction()); | 
|  272         return; |  272         return; | 
|  273     } |  273     } | 
|  274  |  274  | 
|  275     v8::Local<v8::Value> hiddenValue = info.This()->GetHiddenValue(v8::String::N
     ewSymbol("doNotCheckSecurityPerWorldBindingsVoidMethod")); |  275     v8::Local<v8::Value> hiddenValue = info.This()->GetHiddenValue(v8::String::N
     ewFromUtf8(info.GetIsolate(), "doNotCheckSecurityPerWorldBindingsVoidMethod", v8
     ::String::kInternalizedString)); | 
|  276     if (!hiddenValue.IsEmpty()) { |  276     if (!hiddenValue.IsEmpty()) { | 
|  277         v8SetReturnValue(info, hiddenValue); |  277         v8SetReturnValue(info, hiddenValue); | 
|  278         return; |  278         return; | 
|  279     } |  279     } | 
|  280  |  280  | 
|  281     v8SetReturnValue(info, privateTemplate->GetFunction()); |  281     v8SetReturnValue(info, privateTemplate->GetFunction()); | 
|  282 } |  282 } | 
|  283  |  283  | 
|  284 static void doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCa
     llback(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info) |  284 static void doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCa
     llback(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info) | 
|  285 { |  285 { | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
|  300     TestCheckSecurityInterfaceV8Internal::doNotCheckSecurityPerWorldBindingsVoid
     MethodMethodForMainWorld(info); |  300     TestCheckSecurityInterfaceV8Internal::doNotCheckSecurityPerWorldBindingsVoid
     MethodMethodForMainWorld(info); | 
|  301     TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); |  301     TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); | 
|  302 } |  302 } | 
|  303  |  303  | 
|  304 static void doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterFo
     rMainWorld(const v8::PropertyCallbackInfo<v8::Value>& info) |  304 static void doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterFo
     rMainWorld(const v8::PropertyCallbackInfo<v8::Value>& info) | 
|  305 { |  305 { | 
|  306     // This is only for getting a unique pointer which we can pass to privateTem
     plate. |  306     // This is only for getting a unique pointer which we can pass to privateTem
     plate. | 
|  307     static int privateTemplateUniqueKey; |  307     static int privateTemplateUniqueKey; | 
|  308     WrapperWorldType currentWorldType = worldType(info.GetIsolate()); |  308     WrapperWorldType currentWorldType = worldType(info.GetIsolate()); | 
|  309     V8PerIsolateData* data = V8PerIsolateData::from(info.GetIsolate()); |  309     V8PerIsolateData* data = V8PerIsolateData::from(info.GetIsolate()); | 
|  310     v8::Handle<v8::FunctionTemplate> privateTemplate = data->privateTemplate(cur
     rentWorldType, &privateTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal::
     doNotCheckSecurityPerWorldBindingsVoidMethodMethodCallbackForMainWorld, v8Undefi
     ned(), v8::Signature::New(V8PerIsolateData::from(info.GetIsolate())->rawTemplate
     (&V8TestCheckSecurityInterface::wrapperTypeInfo, currentWorldType)), 0); |  310     v8::Handle<v8::FunctionTemplate> privateTemplate = data->privateTemplate(cur
     rentWorldType, &privateTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal::
     doNotCheckSecurityPerWorldBindingsVoidMethodMethodCallbackForMainWorld, v8Undefi
     ned(), v8::Signature::New(info.GetIsolate(), V8PerIsolateData::from(info.GetIsol
     ate())->rawTemplate(&V8TestCheckSecurityInterface::wrapperTypeInfo, currentWorld
     Type)), 0); | 
|  311  |  311  | 
|  312     v8::Handle<v8::Object> holder = info.This()->FindInstanceInPrototypeChain(V8
     TestCheckSecurityInterface::GetTemplate(info.GetIsolate(), currentWorldType)); |  312     v8::Handle<v8::Object> holder = info.This()->FindInstanceInPrototypeChain(V8
     TestCheckSecurityInterface::GetTemplate(info.GetIsolate(), currentWorldType)); | 
|  313     if (holder.IsEmpty()) { |  313     if (holder.IsEmpty()) { | 
|  314         // This is only reachable via |object.__proto__.func|, in which case it |  314         // This is only reachable via |object.__proto__.func|, in which case it | 
|  315         // has already passed the same origin security check |  315         // has already passed the same origin security check | 
|  316         v8SetReturnValue(info, privateTemplate->GetFunction()); |  316         v8SetReturnValue(info, privateTemplate->GetFunction()); | 
|  317         return; |  317         return; | 
|  318     } |  318     } | 
|  319     TestCheckSecurityInterface* imp = V8TestCheckSecurityInterface::toNative(hol
     der); |  319     TestCheckSecurityInterface* imp = V8TestCheckSecurityInterface::toNative(hol
     der); | 
|  320     if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame(), DoNotReportSecu
     rityError)) { |  320     if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame(), DoNotReportSecu
     rityError)) { | 
|  321         static int sharedTemplateUniqueKey; |  321         static int sharedTemplateUniqueKey; | 
|  322         v8::Handle<v8::FunctionTemplate> sharedTemplate = data->privateTemplate(
     currentWorldType, &sharedTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal
     ::doNotCheckSecurityPerWorldBindingsVoidMethodMethodCallbackForMainWorld, v8Unde
     fined(), v8::Signature::New(V8PerIsolateData::from(info.GetIsolate())->rawTempla
     te(&V8TestCheckSecurityInterface::wrapperTypeInfo, currentWorldType)), 0); |  322         v8::Handle<v8::FunctionTemplate> sharedTemplate = data->privateTemplate(
     currentWorldType, &sharedTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal
     ::doNotCheckSecurityPerWorldBindingsVoidMethodMethodCallbackForMainWorld, v8Unde
     fined(), v8::Signature::New(info.GetIsolate(), V8PerIsolateData::from(info.GetIs
     olate())->rawTemplate(&V8TestCheckSecurityInterface::wrapperTypeInfo, currentWor
     ldType)), 0); | 
|  323         v8SetReturnValue(info, sharedTemplate->GetFunction()); |  323         v8SetReturnValue(info, sharedTemplate->GetFunction()); | 
|  324         return; |  324         return; | 
|  325     } |  325     } | 
|  326  |  326  | 
|  327     v8::Local<v8::Value> hiddenValue = info.This()->GetHiddenValue(v8::String::N
     ewSymbol("doNotCheckSecurityPerWorldBindingsVoidMethod")); |  327     v8::Local<v8::Value> hiddenValue = info.This()->GetHiddenValue(v8::String::N
     ewFromUtf8(info.GetIsolate(), "doNotCheckSecurityPerWorldBindingsVoidMethod", v8
     ::String::kInternalizedString)); | 
|  328     if (!hiddenValue.IsEmpty()) { |  328     if (!hiddenValue.IsEmpty()) { | 
|  329         v8SetReturnValue(info, hiddenValue); |  329         v8SetReturnValue(info, hiddenValue); | 
|  330         return; |  330         return; | 
|  331     } |  331     } | 
|  332  |  332  | 
|  333     v8SetReturnValue(info, privateTemplate->GetFunction()); |  333     v8SetReturnValue(info, privateTemplate->GetFunction()); | 
|  334 } |  334 } | 
|  335  |  335  | 
|  336 static void doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCa
     llbackForMainWorld(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Val
     ue>& info) |  336 static void doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCa
     llbackForMainWorld(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Val
     ue>& info) | 
|  337 { |  337 { | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
|  352     TestCheckSecurityInterfaceV8Internal::doNotCheckSecurityReadOnlyVoidMethodMe
     thod(info); |  352     TestCheckSecurityInterfaceV8Internal::doNotCheckSecurityReadOnlyVoidMethodMe
     thod(info); | 
|  353     TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); |  353     TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); | 
|  354 } |  354 } | 
|  355  |  355  | 
|  356 static void doNotCheckSecurityReadOnlyVoidMethodOriginSafeMethodGetter(const v8:
     :PropertyCallbackInfo<v8::Value>& info) |  356 static void doNotCheckSecurityReadOnlyVoidMethodOriginSafeMethodGetter(const v8:
     :PropertyCallbackInfo<v8::Value>& info) | 
|  357 { |  357 { | 
|  358     // This is only for getting a unique pointer which we can pass to privateTem
     plate. |  358     // This is only for getting a unique pointer which we can pass to privateTem
     plate. | 
|  359     static int privateTemplateUniqueKey; |  359     static int privateTemplateUniqueKey; | 
|  360     WrapperWorldType currentWorldType = worldType(info.GetIsolate()); |  360     WrapperWorldType currentWorldType = worldType(info.GetIsolate()); | 
|  361     V8PerIsolateData* data = V8PerIsolateData::from(info.GetIsolate()); |  361     V8PerIsolateData* data = V8PerIsolateData::from(info.GetIsolate()); | 
|  362     v8::Handle<v8::FunctionTemplate> privateTemplate = data->privateTemplate(cur
     rentWorldType, &privateTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal::
     doNotCheckSecurityReadOnlyVoidMethodMethodCallback, v8Undefined(), v8::Signature
     ::New(V8PerIsolateData::from(info.GetIsolate())->rawTemplate(&V8TestCheckSecurit
     yInterface::wrapperTypeInfo, currentWorldType)), 0); |  362     v8::Handle<v8::FunctionTemplate> privateTemplate = data->privateTemplate(cur
     rentWorldType, &privateTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal::
     doNotCheckSecurityReadOnlyVoidMethodMethodCallback, v8Undefined(), v8::Signature
     ::New(info.GetIsolate(), V8PerIsolateData::from(info.GetIsolate())->rawTemplate(
     &V8TestCheckSecurityInterface::wrapperTypeInfo, currentWorldType)), 0); | 
|  363  |  363  | 
|  364     v8::Handle<v8::Object> holder = info.This()->FindInstanceInPrototypeChain(V8
     TestCheckSecurityInterface::GetTemplate(info.GetIsolate(), currentWorldType)); |  364     v8::Handle<v8::Object> holder = info.This()->FindInstanceInPrototypeChain(V8
     TestCheckSecurityInterface::GetTemplate(info.GetIsolate(), currentWorldType)); | 
|  365     if (holder.IsEmpty()) { |  365     if (holder.IsEmpty()) { | 
|  366         // This is only reachable via |object.__proto__.func|, in which case it |  366         // This is only reachable via |object.__proto__.func|, in which case it | 
|  367         // has already passed the same origin security check |  367         // has already passed the same origin security check | 
|  368         v8SetReturnValue(info, privateTemplate->GetFunction()); |  368         v8SetReturnValue(info, privateTemplate->GetFunction()); | 
|  369         return; |  369         return; | 
|  370     } |  370     } | 
|  371     TestCheckSecurityInterface* imp = V8TestCheckSecurityInterface::toNative(hol
     der); |  371     TestCheckSecurityInterface* imp = V8TestCheckSecurityInterface::toNative(hol
     der); | 
|  372     if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame(), DoNotReportSecu
     rityError)) { |  372     if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame(), DoNotReportSecu
     rityError)) { | 
|  373         static int sharedTemplateUniqueKey; |  373         static int sharedTemplateUniqueKey; | 
|  374         v8::Handle<v8::FunctionTemplate> sharedTemplate = data->privateTemplate(
     currentWorldType, &sharedTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal
     ::doNotCheckSecurityReadOnlyVoidMethodMethodCallback, v8Undefined(), v8::Signatu
     re::New(V8PerIsolateData::from(info.GetIsolate())->rawTemplate(&V8TestCheckSecur
     ityInterface::wrapperTypeInfo, currentWorldType)), 0); |  374         v8::Handle<v8::FunctionTemplate> sharedTemplate = data->privateTemplate(
     currentWorldType, &sharedTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal
     ::doNotCheckSecurityReadOnlyVoidMethodMethodCallback, v8Undefined(), v8::Signatu
     re::New(info.GetIsolate(), V8PerIsolateData::from(info.GetIsolate())->rawTemplat
     e(&V8TestCheckSecurityInterface::wrapperTypeInfo, currentWorldType)), 0); | 
|  375         v8SetReturnValue(info, sharedTemplate->GetFunction()); |  375         v8SetReturnValue(info, sharedTemplate->GetFunction()); | 
|  376         return; |  376         return; | 
|  377     } |  377     } | 
|  378  |  378  | 
|  379     v8::Local<v8::Value> hiddenValue = info.This()->GetHiddenValue(v8::String::N
     ewSymbol("doNotCheckSecurityReadOnlyVoidMethod")); |  379     v8::Local<v8::Value> hiddenValue = info.This()->GetHiddenValue(v8::String::N
     ewFromUtf8(info.GetIsolate(), "doNotCheckSecurityReadOnlyVoidMethod", v8::String
     ::kInternalizedString)); | 
|  380     if (!hiddenValue.IsEmpty()) { |  380     if (!hiddenValue.IsEmpty()) { | 
|  381         v8SetReturnValue(info, hiddenValue); |  381         v8SetReturnValue(info, hiddenValue); | 
|  382         return; |  382         return; | 
|  383     } |  383     } | 
|  384  |  384  | 
|  385     v8SetReturnValue(info, privateTemplate->GetFunction()); |  385     v8SetReturnValue(info, privateTemplate->GetFunction()); | 
|  386 } |  386 } | 
|  387  |  387  | 
|  388 static void doNotCheckSecurityReadOnlyVoidMethodOriginSafeMethodGetterCallback(v
     8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info) |  388 static void doNotCheckSecurityReadOnlyVoidMethodOriginSafeMethodGetterCallback(v
     8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info) | 
|  389 { |  389 { | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
|  404     TestCheckSecurityInterfaceV8Internal::doNotCheckSecurityUnforgeableVoidMetho
     dMethod(info); |  404     TestCheckSecurityInterfaceV8Internal::doNotCheckSecurityUnforgeableVoidMetho
     dMethod(info); | 
|  405     TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); |  405     TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); | 
|  406 } |  406 } | 
|  407  |  407  | 
|  408 static void doNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGetter(const 
     v8::PropertyCallbackInfo<v8::Value>& info) |  408 static void doNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGetter(const 
     v8::PropertyCallbackInfo<v8::Value>& info) | 
|  409 { |  409 { | 
|  410     // This is only for getting a unique pointer which we can pass to privateTem
     plate. |  410     // This is only for getting a unique pointer which we can pass to privateTem
     plate. | 
|  411     static int privateTemplateUniqueKey; |  411     static int privateTemplateUniqueKey; | 
|  412     WrapperWorldType currentWorldType = worldType(info.GetIsolate()); |  412     WrapperWorldType currentWorldType = worldType(info.GetIsolate()); | 
|  413     V8PerIsolateData* data = V8PerIsolateData::from(info.GetIsolate()); |  413     V8PerIsolateData* data = V8PerIsolateData::from(info.GetIsolate()); | 
|  414     v8::Handle<v8::FunctionTemplate> privateTemplate = data->privateTemplate(cur
     rentWorldType, &privateTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal::
     doNotCheckSecurityUnforgeableVoidMethodMethodCallback, v8Undefined(), v8::Signat
     ure::New(V8PerIsolateData::from(info.GetIsolate())->rawTemplate(&V8TestCheckSecu
     rityInterface::wrapperTypeInfo, currentWorldType)), 0); |  414     v8::Handle<v8::FunctionTemplate> privateTemplate = data->privateTemplate(cur
     rentWorldType, &privateTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal::
     doNotCheckSecurityUnforgeableVoidMethodMethodCallback, v8Undefined(), v8::Signat
     ure::New(info.GetIsolate(), V8PerIsolateData::from(info.GetIsolate())->rawTempla
     te(&V8TestCheckSecurityInterface::wrapperTypeInfo, currentWorldType)), 0); | 
|  415  |  415  | 
|  416     v8::Handle<v8::Object> holder = info.This()->FindInstanceInPrototypeChain(V8
     TestCheckSecurityInterface::GetTemplate(info.GetIsolate(), currentWorldType)); |  416     v8::Handle<v8::Object> holder = info.This()->FindInstanceInPrototypeChain(V8
     TestCheckSecurityInterface::GetTemplate(info.GetIsolate(), currentWorldType)); | 
|  417     if (holder.IsEmpty()) { |  417     if (holder.IsEmpty()) { | 
|  418         // This is only reachable via |object.__proto__.func|, in which case it |  418         // This is only reachable via |object.__proto__.func|, in which case it | 
|  419         // has already passed the same origin security check |  419         // has already passed the same origin security check | 
|  420         v8SetReturnValue(info, privateTemplate->GetFunction()); |  420         v8SetReturnValue(info, privateTemplate->GetFunction()); | 
|  421         return; |  421         return; | 
|  422     } |  422     } | 
|  423     TestCheckSecurityInterface* imp = V8TestCheckSecurityInterface::toNative(hol
     der); |  423     TestCheckSecurityInterface* imp = V8TestCheckSecurityInterface::toNative(hol
     der); | 
|  424     if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame(), DoNotReportSecu
     rityError)) { |  424     if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame(), DoNotReportSecu
     rityError)) { | 
|  425         static int sharedTemplateUniqueKey; |  425         static int sharedTemplateUniqueKey; | 
|  426         v8::Handle<v8::FunctionTemplate> sharedTemplate = data->privateTemplate(
     currentWorldType, &sharedTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal
     ::doNotCheckSecurityUnforgeableVoidMethodMethodCallback, v8Undefined(), v8::Sign
     ature::New(V8PerIsolateData::from(info.GetIsolate())->rawTemplate(&V8TestCheckSe
     curityInterface::wrapperTypeInfo, currentWorldType)), 0); |  426         v8::Handle<v8::FunctionTemplate> sharedTemplate = data->privateTemplate(
     currentWorldType, &sharedTemplateUniqueKey, TestCheckSecurityInterfaceV8Internal
     ::doNotCheckSecurityUnforgeableVoidMethodMethodCallback, v8Undefined(), v8::Sign
     ature::New(info.GetIsolate(), V8PerIsolateData::from(info.GetIsolate())->rawTemp
     late(&V8TestCheckSecurityInterface::wrapperTypeInfo, currentWorldType)), 0); | 
|  427         v8SetReturnValue(info, sharedTemplate->GetFunction()); |  427         v8SetReturnValue(info, sharedTemplate->GetFunction()); | 
|  428         return; |  428         return; | 
|  429     } |  429     } | 
|  430  |  430  | 
|  431     v8::Local<v8::Value> hiddenValue = info.This()->GetHiddenValue(v8::String::N
     ewSymbol("doNotCheckSecurityUnforgeableVoidMethod")); |  431     v8::Local<v8::Value> hiddenValue = info.This()->GetHiddenValue(v8::String::N
     ewFromUtf8(info.GetIsolate(), "doNotCheckSecurityUnforgeableVoidMethod", v8::Str
     ing::kInternalizedString)); | 
|  432     if (!hiddenValue.IsEmpty()) { |  432     if (!hiddenValue.IsEmpty()) { | 
|  433         v8SetReturnValue(info, hiddenValue); |  433         v8SetReturnValue(info, hiddenValue); | 
|  434         return; |  434         return; | 
|  435     } |  435     } | 
|  436  |  436  | 
|  437     v8SetReturnValue(info, privateTemplate->GetFunction()); |  437     v8SetReturnValue(info, privateTemplate->GetFunction()); | 
|  438 } |  438 } | 
|  439  |  439  | 
|  440 static void doNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGetterCallbac
     k(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info) |  440 static void doNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGetterCallbac
     k(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info) | 
|  441 { |  441 { | 
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  488         V8TestCheckSecurityInterfaceAttributes, WTF_ARRAY_LENGTH(V8TestCheckSecu
     rityInterfaceAttributes), |  488         V8TestCheckSecurityInterfaceAttributes, WTF_ARRAY_LENGTH(V8TestCheckSecu
     rityInterfaceAttributes), | 
|  489         0, 0, |  489         0, 0, | 
|  490         V8TestCheckSecurityInterfaceMethods, WTF_ARRAY_LENGTH(V8TestCheckSecurit
     yInterfaceMethods), |  490         V8TestCheckSecurityInterfaceMethods, WTF_ARRAY_LENGTH(V8TestCheckSecurit
     yInterfaceMethods), | 
|  491         isolate, currentWorldType); |  491         isolate, currentWorldType); | 
|  492     UNUSED_PARAM(defaultSignature); |  492     UNUSED_PARAM(defaultSignature); | 
|  493     v8::Local<v8::ObjectTemplate> instanceTemplate = functionTemplate->InstanceT
     emplate(); |  493     v8::Local<v8::ObjectTemplate> instanceTemplate = functionTemplate->InstanceT
     emplate(); | 
|  494     v8::Local<v8::ObjectTemplate> prototypeTemplate = functionTemplate->Prototyp
     eTemplate(); |  494     v8::Local<v8::ObjectTemplate> prototypeTemplate = functionTemplate->Prototyp
     eTemplate(); | 
|  495     UNUSED_PARAM(instanceTemplate); |  495     UNUSED_PARAM(instanceTemplate); | 
|  496     UNUSED_PARAM(prototypeTemplate); |  496     UNUSED_PARAM(prototypeTemplate); | 
|  497     instanceTemplate->SetAccessCheckCallbacks(TestCheckSecurityInterfaceV8Intern
     al::namedSecurityCheck, TestCheckSecurityInterfaceV8Internal::indexedSecurityChe
     ck, v8::External::New(isolate, const_cast<WrapperTypeInfo*>(&V8TestCheckSecurity
     Interface::wrapperTypeInfo))); |  497     instanceTemplate->SetAccessCheckCallbacks(TestCheckSecurityInterfaceV8Intern
     al::namedSecurityCheck, TestCheckSecurityInterfaceV8Internal::indexedSecurityChe
     ck, v8::External::New(isolate, const_cast<WrapperTypeInfo*>(&V8TestCheckSecurity
     Interface::wrapperTypeInfo))); | 
|  498     prototypeTemplate->SetAccessor(v8::String::NewSymbol("doNotCheckSecurityVoid
     Method"), TestCheckSecurityInterfaceV8Internal::doNotCheckSecurityVoidMethodOrig
     inSafeMethodGetterCallback, TestCheckSecurityInterfaceV8Internal::TestCheckSecur
     ityInterfaceOriginSafeMethodSetterCallback, v8Undefined(), v8::ALL_CAN_READ, sta
     tic_cast<v8::PropertyAttribute>(v8::DontDelete)); |  498     prototypeTemplate->SetAccessor(v8::String::NewFromUtf8(isolate, "doNotCheckS
     ecurityVoidMethod", v8::String::kInternalizedString), TestCheckSecurityInterface
     V8Internal::doNotCheckSecurityVoidMethodOriginSafeMethodGetterCallback, TestChec
     kSecurityInterfaceV8Internal::TestCheckSecurityInterfaceOriginSafeMethodSetterCa
     llback, v8Undefined(), v8::ALL_CAN_READ, static_cast<v8::PropertyAttribute>(v8::
     DontDelete)); | 
|  499     if (currentWorldType == MainWorld) { |  499     if (currentWorldType == MainWorld) { | 
|  500         prototypeTemplate->SetAccessor(v8::String::NewSymbol("doNotCheckSecurity
     PerWorldBindingsVoidMethod"), TestCheckSecurityInterfaceV8Internal::doNotCheckSe
     curityPerWorldBindingsVoidMethodOriginSafeMethodGetterCallbackForMainWorld, Test
     CheckSecurityInterfaceV8Internal::TestCheckSecurityInterfaceOriginSafeMethodSett
     erCallback, v8Undefined(), v8::ALL_CAN_READ, static_cast<v8::PropertyAttribute>(
     v8::DontDelete)); |  500         prototypeTemplate->SetAccessor(v8::String::NewFromUtf8(isolate, "doNotCh
     eckSecurityPerWorldBindingsVoidMethod", v8::String::kInternalizedString), TestCh
     eckSecurityInterfaceV8Internal::doNotCheckSecurityPerWorldBindingsVoidMethodOrig
     inSafeMethodGetterCallbackForMainWorld, TestCheckSecurityInterfaceV8Internal::Te
     stCheckSecurityInterfaceOriginSafeMethodSetterCallback, v8Undefined(), v8::ALL_C
     AN_READ, static_cast<v8::PropertyAttribute>(v8::DontDelete)); | 
|  501     } else { |  501     } else { | 
|  502         prototypeTemplate->SetAccessor(v8::String::NewSymbol("doNotCheckSecurity
     PerWorldBindingsVoidMethod"), TestCheckSecurityInterfaceV8Internal::doNotCheckSe
     curityPerWorldBindingsVoidMethodOriginSafeMethodGetterCallback, TestCheckSecurit
     yInterfaceV8Internal::TestCheckSecurityInterfaceOriginSafeMethodSetterCallback, 
     v8Undefined(), v8::ALL_CAN_READ, static_cast<v8::PropertyAttribute>(v8::DontDele
     te)); |  502         prototypeTemplate->SetAccessor(v8::String::NewFromUtf8(isolate, "doNotCh
     eckSecurityPerWorldBindingsVoidMethod", v8::String::kInternalizedString), TestCh
     eckSecurityInterfaceV8Internal::doNotCheckSecurityPerWorldBindingsVoidMethodOrig
     inSafeMethodGetterCallback, TestCheckSecurityInterfaceV8Internal::TestCheckSecur
     ityInterfaceOriginSafeMethodSetterCallback, v8Undefined(), v8::ALL_CAN_READ, sta
     tic_cast<v8::PropertyAttribute>(v8::DontDelete)); | 
|  503     } |  503     } | 
|  504     prototypeTemplate->SetAccessor(v8::String::NewSymbol("doNotCheckSecurityRead
     OnlyVoidMethod"), TestCheckSecurityInterfaceV8Internal::doNotCheckSecurityReadOn
     lyVoidMethodOriginSafeMethodGetterCallback, 0, v8Undefined(), v8::ALL_CAN_READ, 
     static_cast<v8::PropertyAttribute>(v8::DontDelete | v8::ReadOnly)); |  504     prototypeTemplate->SetAccessor(v8::String::NewFromUtf8(isolate, "doNotCheckS
     ecurityReadOnlyVoidMethod", v8::String::kInternalizedString), TestCheckSecurityI
     nterfaceV8Internal::doNotCheckSecurityReadOnlyVoidMethodOriginSafeMethodGetterCa
     llback, 0, v8Undefined(), v8::ALL_CAN_READ, static_cast<v8::PropertyAttribute>(v
     8::DontDelete | v8::ReadOnly)); | 
|  505     instanceTemplate->SetAccessor(v8::String::NewSymbol("doNotCheckSecurityUnfor
     geableVoidMethod"), TestCheckSecurityInterfaceV8Internal::doNotCheckSecurityUnfo
     rgeableVoidMethodOriginSafeMethodGetterCallback, TestCheckSecurityInterfaceV8Int
     ernal::TestCheckSecurityInterfaceOriginSafeMethodSetterCallback, v8Undefined(), 
     v8::ALL_CAN_READ, static_cast<v8::PropertyAttribute>(v8::DontDelete)); |  505     instanceTemplate->SetAccessor(v8::String::NewFromUtf8(isolate, "doNotCheckSe
     curityUnforgeableVoidMethod", v8::String::kInternalizedString), TestCheckSecurit
     yInterfaceV8Internal::doNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGet
     terCallback, TestCheckSecurityInterfaceV8Internal::TestCheckSecurityInterfaceOri
     ginSafeMethodSetterCallback, v8Undefined(), v8::ALL_CAN_READ, static_cast<v8::Pr
     opertyAttribute>(v8::DontDelete)); | 
|  506  |  506  | 
|  507     // Custom toString template |  507     // Custom toString template | 
|  508     functionTemplate->Set(v8::String::NewSymbol("toString"), V8PerIsolateData::c
     urrent()->toStringTemplate()); |  508     functionTemplate->Set(v8::String::NewFromUtf8(isolate, "toString", v8::Strin
     g::kInternalizedString), V8PerIsolateData::current()->toStringTemplate()); | 
|  509     return functionTemplate; |  509     return functionTemplate; | 
|  510 } |  510 } | 
|  511  |  511  | 
|  512 v8::Handle<v8::FunctionTemplate> V8TestCheckSecurityInterface::GetTemplate(v8::I
     solate* isolate, WrapperWorldType currentWorldType) |  512 v8::Handle<v8::FunctionTemplate> V8TestCheckSecurityInterface::GetTemplate(v8::I
     solate* isolate, WrapperWorldType currentWorldType) | 
|  513 { |  513 { | 
|  514     V8PerIsolateData* data = V8PerIsolateData::from(isolate); |  514     V8PerIsolateData* data = V8PerIsolateData::from(isolate); | 
|  515     V8PerIsolateData::TemplateMap::iterator result = data->templateMap(currentWo
     rldType).find(&wrapperTypeInfo); |  515     V8PerIsolateData::TemplateMap::iterator result = data->templateMap(currentWo
     rldType).find(&wrapperTypeInfo); | 
|  516     if (result != data->templateMap(currentWorldType).end()) |  516     if (result != data->templateMap(currentWorldType).end()) | 
|  517         return result->value.newLocal(isolate); |  517         return result->value.newLocal(isolate); | 
|  518  |  518  | 
|  519     TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "BuildDOMTemplate"); |  519     TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "BuildDOMTemplate"); | 
|  520     v8::HandleScope handleScope(isolate); |  520     v8::EscapableHandleScope handleScope(isolate); | 
|  521     v8::Handle<v8::FunctionTemplate> templ = |  521     v8::Local<v8::FunctionTemplate> templ = | 
|  522         ConfigureV8TestCheckSecurityInterfaceTemplate(data->rawTemplate(&wrapper
     TypeInfo, currentWorldType), isolate, currentWorldType); |  522         ConfigureV8TestCheckSecurityInterfaceTemplate(data->rawTemplate(&wrapper
     TypeInfo, currentWorldType), isolate, currentWorldType); | 
|  523     data->templateMap(currentWorldType).add(&wrapperTypeInfo, UnsafePersistent<v
     8::FunctionTemplate>(isolate, templ)); |  523     data->templateMap(currentWorldType).add(&wrapperTypeInfo, UnsafePersistent<v
     8::FunctionTemplate>(isolate, templ)); | 
|  524     return handleScope.Close(templ); |  524     return handleScope.Escape(templ); | 
|  525 } |  525 } | 
|  526  |  526  | 
|  527 bool V8TestCheckSecurityInterface::hasInstance(v8::Handle<v8::Value> jsValue, v8
     ::Isolate* isolate, WrapperWorldType currentWorldType) |  527 bool V8TestCheckSecurityInterface::hasInstance(v8::Handle<v8::Value> jsValue, v8
     ::Isolate* isolate, WrapperWorldType currentWorldType) | 
|  528 { |  528 { | 
|  529     return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, jsValu
     e, currentWorldType); |  529     return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, jsValu
     e, currentWorldType); | 
|  530 } |  530 } | 
|  531  |  531  | 
|  532 bool V8TestCheckSecurityInterface::hasInstanceInAnyWorld(v8::Handle<v8::Value> j
     sValue, v8::Isolate* isolate) |  532 bool V8TestCheckSecurityInterface::hasInstanceInAnyWorld(v8::Handle<v8::Value> j
     sValue, v8::Isolate* isolate) | 
|  533 { |  533 { | 
|  534     return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, jsValu
     e, MainWorld) |  534     return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, jsValu
     e, MainWorld) | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
|  561     fromInternalPointer(object)->deref(); |  561     fromInternalPointer(object)->deref(); | 
|  562 } |  562 } | 
|  563  |  563  | 
|  564 template<> |  564 template<> | 
|  565 v8::Handle<v8::Value> toV8NoInline(TestCheckSecurityInterface* impl, v8::Handle<
     v8::Object> creationContext, v8::Isolate* isolate) |  565 v8::Handle<v8::Value> toV8NoInline(TestCheckSecurityInterface* impl, v8::Handle<
     v8::Object> creationContext, v8::Isolate* isolate) | 
|  566 { |  566 { | 
|  567     return toV8(impl, creationContext, isolate); |  567     return toV8(impl, creationContext, isolate); | 
|  568 } |  568 } | 
|  569  |  569  | 
|  570 } // namespace WebCore |  570 } // namespace WebCore | 
| OLD | NEW |