Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(507)

Side by Side Diff: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp

Issue 2815313002: Reland of Move ScriptState::GetExecutionContext (Part 5) (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 16 matching lines...) Expand all
27 27
28 #include <memory> 28 #include <memory>
29 #include "bindings/core/v8/ExceptionMessages.h" 29 #include "bindings/core/v8/ExceptionMessages.h"
30 #include "bindings/core/v8/ExceptionState.h" 30 #include "bindings/core/v8/ExceptionState.h"
31 #include "bindings/core/v8/ScriptWrappableVisitor.h" 31 #include "bindings/core/v8/ScriptWrappableVisitor.h"
32 #include "bindings/core/v8/V8BindingMacros.h" 32 #include "bindings/core/v8/V8BindingMacros.h"
33 #include "bindings/modules/v8/HTMLCanvasElementOrOffscreenCanvas.h" 33 #include "bindings/modules/v8/HTMLCanvasElementOrOffscreenCanvas.h"
34 #include "bindings/modules/v8/WebGLAny.h" 34 #include "bindings/modules/v8/WebGLAny.h"
35 #include "core/dom/DOMArrayBuffer.h" 35 #include "core/dom/DOMArrayBuffer.h"
36 #include "core/dom/DOMTypedArray.h" 36 #include "core/dom/DOMTypedArray.h"
37 #include "core/dom/ExecutionContext.h"
37 #include "core/dom/FlexibleArrayBufferView.h" 38 #include "core/dom/FlexibleArrayBufferView.h"
38 #include "core/dom/TaskRunnerHelper.h" 39 #include "core/dom/TaskRunnerHelper.h"
39 #include "core/frame/ImageBitmap.h" 40 #include "core/frame/ImageBitmap.h"
40 #include "core/frame/LocalFrame.h" 41 #include "core/frame/LocalFrame.h"
41 #include "core/frame/LocalFrameClient.h" 42 #include "core/frame/LocalFrameClient.h"
42 #include "core/frame/Settings.h" 43 #include "core/frame/Settings.h"
43 #include "core/html/HTMLCanvasElement.h" 44 #include "core/html/HTMLCanvasElement.h"
44 #include "core/html/HTMLImageElement.h" 45 #include "core/html/HTMLImageElement.h"
45 #include "core/html/HTMLVideoElement.h" 46 #include "core/html/HTMLVideoElement.h"
46 #include "core/html/ImageData.h" 47 #include "core/html/ImageData.h"
(...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 HTMLCanvasElement* canvas, 641 HTMLCanvasElement* canvas,
641 ScriptState* script_state, 642 ScriptState* script_state,
642 const CanvasContextCreationAttributes& attributes, 643 const CanvasContextCreationAttributes& attributes,
643 unsigned web_gl_version) { 644 unsigned web_gl_version) {
644 // Exactly one of these must be provided. 645 // Exactly one of these must be provided.
645 DCHECK_EQ(!canvas, !!script_state); 646 DCHECK_EQ(!canvas, !!script_state);
646 // The canvas is only given on the main thread. 647 // The canvas is only given on the main thread.
647 DCHECK(!canvas || IsMainThread()); 648 DCHECK(!canvas || IsMainThread());
648 649
649 auto execution_context = canvas ? canvas->GetDocument().GetExecutionContext() 650 auto execution_context = canvas ? canvas->GetDocument().GetExecutionContext()
650 : script_state->GetExecutionContext(); 651 : ExecutionContext::From(script_state);
651 Platform::ContextAttributes context_attributes = ToPlatformContextAttributes( 652 Platform::ContextAttributes context_attributes = ToPlatformContextAttributes(
652 attributes, web_gl_version, 653 attributes, web_gl_version,
653 SupportOwnOffscreenSurface(execution_context)); 654 SupportOwnOffscreenSurface(execution_context));
654 655
655 Platform::GraphicsInfo gl_info; 656 Platform::GraphicsInfo gl_info;
656 std::unique_ptr<WebGraphicsContext3DProvider> context_provider; 657 std::unique_ptr<WebGraphicsContext3DProvider> context_provider;
657 const auto& url = canvas ? canvas->GetDocument().TopDocument().Url() 658 const auto& url = canvas ? canvas->GetDocument().TopDocument().Url()
658 : script_state->GetExecutionContext()->Url(); 659 : ExecutionContext::From(script_state)->Url();
659 if (IsMainThread()) { 660 if (IsMainThread()) {
660 context_provider = WTF::WrapUnique( 661 context_provider = WTF::WrapUnique(
661 Platform::Current()->CreateOffscreenGraphicsContext3DProvider( 662 Platform::Current()->CreateOffscreenGraphicsContext3DProvider(
662 context_attributes, url, 0, &gl_info)); 663 context_attributes, url, 0, &gl_info));
663 } else { 664 } else {
664 context_provider = 665 context_provider =
665 CreateContextProviderOnWorkerThread(context_attributes, &gl_info, url); 666 CreateContextProviderOnWorkerThread(context_attributes, &gl_info, url);
666 } 667 }
667 if (context_provider && !context_provider->BindToCurrentThread()) { 668 if (context_provider && !context_provider->BindToCurrentThread()) {
668 context_provider = nullptr; 669 context_provider = nullptr;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 } 730 }
730 731
731 void WebGLRenderingContextBase::ForceNextWebGLContextCreationToFail() { 732 void WebGLRenderingContextBase::ForceNextWebGLContextCreationToFail() {
732 g_should_fail_context_creation_for_testing = true; 733 g_should_fail_context_creation_for_testing = true;
733 } 734 }
734 735
735 ImageBitmap* WebGLRenderingContextBase::TransferToImageBitmapBase( 736 ImageBitmap* WebGLRenderingContextBase::TransferToImageBitmapBase(
736 ScriptState* script_state) { 737 ScriptState* script_state) {
737 UseCounter::Feature feature = 738 UseCounter::Feature feature =
738 UseCounter::kOffscreenCanvasTransferToImageBitmapWebGL; 739 UseCounter::kOffscreenCanvasTransferToImageBitmapWebGL;
739 UseCounter::Count(script_state->GetExecutionContext(), feature); 740 UseCounter::Count(ExecutionContext::From(script_state), feature);
740 if (!GetDrawingBuffer()) 741 if (!GetDrawingBuffer())
741 return nullptr; 742 return nullptr;
742 return ImageBitmap::Create(GetDrawingBuffer()->TransferToStaticBitmapImage()); 743 return ImageBitmap::Create(GetDrawingBuffer()->TransferToStaticBitmapImage());
743 } 744 }
744 745
745 ScriptPromise WebGLRenderingContextBase::commit( 746 ScriptPromise WebGLRenderingContextBase::commit(
746 ScriptState* script_state, 747 ScriptState* script_state,
747 ExceptionState& exception_state) { 748 ExceptionState& exception_state) {
748 UseCounter::Feature feature = UseCounter::kOffscreenCanvasCommitWebGL; 749 UseCounter::Feature feature = UseCounter::kOffscreenCanvasCommitWebGL;
749 UseCounter::Count(script_state->GetExecutionContext(), feature); 750 UseCounter::Count(ExecutionContext::From(script_state), feature);
750 if (!offscreenCanvas()) { 751 if (!offscreenCanvas()) {
751 exception_state.ThrowDOMException(kInvalidStateError, 752 exception_state.ThrowDOMException(kInvalidStateError,
752 "Commit() was called on a rendering " 753 "Commit() was called on a rendering "
753 "context that was not created from an " 754 "context that was not created from an "
754 "OffscreenCanvas."); 755 "OffscreenCanvas.");
755 return exception_state.Reject(script_state); 756 return exception_state.Reject(script_state);
756 } 757 }
757 // no HTMLCanvas associated, thrown InvalidStateError 758 // no HTMLCanvas associated, thrown InvalidStateError
758 if (!offscreenCanvas()->HasPlaceholderCanvas()) { 759 if (!offscreenCanvas()->HasPlaceholderCanvas()) {
759 exception_state.ThrowDOMException( 760 exception_state.ThrowDOMException(
(...skipping 7073 matching lines...) Expand 10 before | Expand all | Expand 10 after
7833 7834
7834 void WebGLRenderingContextBase::getHTMLOrOffscreenCanvas( 7835 void WebGLRenderingContextBase::getHTMLOrOffscreenCanvas(
7835 HTMLCanvasElementOrOffscreenCanvas& result) const { 7836 HTMLCanvasElementOrOffscreenCanvas& result) const {
7836 if (canvas()) 7837 if (canvas())
7837 result.setHTMLCanvasElement(canvas()); 7838 result.setHTMLCanvasElement(canvas());
7838 else 7839 else
7839 result.setOffscreenCanvas(offscreenCanvas()); 7840 result.setOffscreenCanvas(offscreenCanvas());
7840 } 7841 }
7841 7842
7842 } // namespace blink 7843 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698