| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 | 53 |
| 54 // It's important to check that targetWindow is a LocalDOMWindow: it's | 54 // It's important to check that targetWindow is a LocalDOMWindow: it's |
| 55 // possible for a remote frame and local frame to have the same security | 55 // possible for a remote frame and local frame to have the same security |
| 56 // origin, depending on the model being used to allocate Frames between | 56 // origin, depending on the model being used to allocate Frames between |
| 57 // processes. See https://crbug.com/601629. | 57 // processes. See https://crbug.com/601629. |
| 58 if (!(accessingWindow && targetWindow && targetWindow->isLocalDOMWindow())) | 58 if (!(accessingWindow && targetWindow && targetWindow->isLocalDOMWindow())) |
| 59 return false; | 59 return false; |
| 60 | 60 |
| 61 const SecurityOrigin* accessingOrigin = | 61 const SecurityOrigin* accessingOrigin = |
| 62 accessingWindow->document()->getSecurityOrigin(); | 62 accessingWindow->document()->getSecurityOrigin(); |
| 63 if (!accessingOrigin->canAccessCheckSuborigins(targetFrameOrigin)) | 63 if (!accessingOrigin->canAccess(targetFrameOrigin)) |
| 64 return false; | 64 return false; |
| 65 | 65 |
| 66 // Notify the loader's client if the initial document has been accessed. | 66 // Notify the loader's client if the initial document has been accessed. |
| 67 LocalFrame* targetFrame = toLocalDOMWindow(targetWindow)->frame(); | 67 LocalFrame* targetFrame = toLocalDOMWindow(targetWindow)->frame(); |
| 68 if (targetFrame && | 68 if (targetFrame && |
| 69 targetFrame->loader().stateMachine()->isDisplayingInitialEmptyDocument()) | 69 targetFrame->loader().stateMachine()->isDisplayingInitialEmptyDocument()) |
| 70 targetFrame->loader().didAccessInitialDocument(); | 70 targetFrame->loader().didAccessInitialDocument(); |
| 71 | 71 |
| 72 return true; | 72 return true; |
| 73 } | 73 } |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 accessingFrame->securityContext()->getSecurityOrigin(); | 234 accessingFrame->securityContext()->getSecurityOrigin(); |
| 235 | 235 |
| 236 const Frame* targetFrame = targetWindow->frame(); | 236 const Frame* targetFrame = targetWindow->frame(); |
| 237 DCHECK(targetFrame); | 237 DCHECK(targetFrame); |
| 238 DCHECK(targetFrame->securityContext()); | 238 DCHECK(targetFrame->securityContext()); |
| 239 const SecurityOrigin* targetOrigin = | 239 const SecurityOrigin* targetOrigin = |
| 240 targetFrame->securityContext()->getSecurityOrigin(); | 240 targetFrame->securityContext()->getSecurityOrigin(); |
| 241 SECURITY_CHECK(!(targetWindow && targetWindow->frame()) || | 241 SECURITY_CHECK(!(targetWindow && targetWindow->frame()) || |
| 242 targetWindow == targetWindow->frame()->domWindow()); | 242 targetWindow == targetWindow->frame()->domWindow()); |
| 243 | 243 |
| 244 if (!accessingOrigin->canAccessCheckSuborigins(targetOrigin)) | 244 if (!accessingOrigin->canAccess(targetOrigin)) |
| 245 return false; | 245 return false; |
| 246 | 246 |
| 247 // Note that there is no need to call back | 247 // Note that there is no need to call back |
| 248 // FrameLoader::didAccessInitialDocument() because |targetWindow| must be | 248 // FrameLoader::didAccessInitialDocument() because |targetWindow| must be |
| 249 // a child window inside iframe or frame and it doesn't have a URL bar, | 249 // a child window inside iframe or frame and it doesn't have a URL bar, |
| 250 // so there is no need to worry about URL spoofing. | 250 // so there is no need to worry about URL spoofing. |
| 251 | 251 |
| 252 return true; | 252 return true; |
| 253 } | 253 } |
| 254 | 254 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 265 // arguments, so the generated exception can be more descriptive. | 265 // arguments, so the generated exception can be more descriptive. |
| 266 ExceptionState exceptionState(isolate, ExceptionState::UnknownContext, | 266 ExceptionState exceptionState(isolate, ExceptionState::UnknownContext, |
| 267 nullptr, nullptr); | 267 nullptr, nullptr); |
| 268 exceptionState.throwSecurityError( | 268 exceptionState.throwSecurityError( |
| 269 targetWindow->sanitizedCrossDomainAccessErrorMessage( | 269 targetWindow->sanitizedCrossDomainAccessErrorMessage( |
| 270 currentDOMWindow(isolate)), | 270 currentDOMWindow(isolate)), |
| 271 targetWindow->crossDomainAccessErrorMessage(currentDOMWindow(isolate))); | 271 targetWindow->crossDomainAccessErrorMessage(currentDOMWindow(isolate))); |
| 272 } | 272 } |
| 273 | 273 |
| 274 } // namespace blink | 274 } // namespace blink |
| OLD | NEW |