Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
michael@0 | 1 | /* This Source Code Form is subject to the terms of the Mozilla Public |
michael@0 | 2 | * License, v. 2.0. If a copy of the MPL was not distributed with this |
michael@0 | 3 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
michael@0 | 4 | |
michael@0 | 5 | /* Platform specific code to invoke XPCOM methods on native objects */ |
michael@0 | 6 | |
michael@0 | 7 | #include "xptcprivate.h" |
michael@0 | 8 | |
michael@0 | 9 | #ifdef _AIX |
michael@0 | 10 | |
michael@0 | 11 | extern "C" void |
michael@0 | 12 | invoke_copy_to_stack(uint64_t* d, uint32_t paramCount, nsXPTCVariant* s, double *fprData) |
michael@0 | 13 | { |
michael@0 | 14 | /* |
michael@0 | 15 | We need to copy the parameters for this function to locals and use them |
michael@0 | 16 | from there since the parameters occupy the same stack space as the stack |
michael@0 | 17 | we're trying to populate. |
michael@0 | 18 | */ |
michael@0 | 19 | uint64_t *l_d = d; |
michael@0 | 20 | nsXPTCVariant *l_s = s; |
michael@0 | 21 | uint32_t l_paramCount = paramCount, fpCount = 0; |
michael@0 | 22 | double *l_fprData = fprData; |
michael@0 | 23 | |
michael@0 | 24 | for(uint32_t i = 0; i < l_paramCount; i++, l_d++, l_s++) |
michael@0 | 25 | { |
michael@0 | 26 | if(l_s->IsPtrData()) |
michael@0 | 27 | { |
michael@0 | 28 | *l_d = (uint64_t)l_s->ptr; |
michael@0 | 29 | continue; |
michael@0 | 30 | } |
michael@0 | 31 | switch(l_s->type) |
michael@0 | 32 | { |
michael@0 | 33 | case nsXPTType::T_I8: *l_d = (uint64_t)l_s->val.i8; break; |
michael@0 | 34 | case nsXPTType::T_I16: *l_d = (uint64_t)l_s->val.i16; break; |
michael@0 | 35 | case nsXPTType::T_I32: *l_d = (uint64_t)l_s->val.i32; break; |
michael@0 | 36 | case nsXPTType::T_I64: *l_d = (uint64_t)l_s->val.i64; break; |
michael@0 | 37 | case nsXPTType::T_U8: *l_d = (uint64_t)l_s->val.u8; break; |
michael@0 | 38 | case nsXPTType::T_U16: *l_d = (uint64_t)l_s->val.u16; break; |
michael@0 | 39 | case nsXPTType::T_U32: *l_d = (uint64_t)l_s->val.u32; break; |
michael@0 | 40 | case nsXPTType::T_U64: *l_d = (uint64_t)l_s->val.u64; break; |
michael@0 | 41 | case nsXPTType::T_BOOL: *l_d = (uint64_t)l_s->val.b; break; |
michael@0 | 42 | case nsXPTType::T_CHAR: *l_d = (uint64_t)l_s->val.c; break; |
michael@0 | 43 | case nsXPTType::T_WCHAR: *l_d = (uint64_t)l_s->val.wc; break; |
michael@0 | 44 | |
michael@0 | 45 | case nsXPTType::T_DOUBLE: |
michael@0 | 46 | *((double*)l_d) = l_s->val.d; |
michael@0 | 47 | if(fpCount < 13) |
michael@0 | 48 | l_fprData[fpCount++] = l_s->val.d; |
michael@0 | 49 | break; |
michael@0 | 50 | case nsXPTType::T_FLOAT: |
michael@0 | 51 | *((float*)l_d) = l_s->val.f; |
michael@0 | 52 | if(fpCount < 13) |
michael@0 | 53 | l_fprData[fpCount++] = l_s->val.f; |
michael@0 | 54 | break; |
michael@0 | 55 | default: |
michael@0 | 56 | // all the others are plain pointer types |
michael@0 | 57 | *l_d = (uint64_t)l_s->val.p; |
michael@0 | 58 | break; |
michael@0 | 59 | } |
michael@0 | 60 | } |
michael@0 | 61 | } |
michael@0 | 62 | #endif |
michael@0 | 63 |