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

Side by Side Diff: sky/engine/bindings-dart/core/dart/custom/DartBlobCustom.cpp

Issue 918273002: Remove bindings-dart (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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
(Empty)
1 // Copyright 2011, Google Inc.
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are
6 // met:
7 //
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above
11 // copyright notice, this list of conditions and the following disclaimer
12 // in the documentation and/or other materials provided with the
13 // distribution.
14 // * Neither the name of Google Inc. nor the names of its
15 // contributors may be used to endorse or promote products derived from
16 // this software without specific prior written permission.
17 //
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30 #include "config.h"
31 #include "bindings/core/dart/DartBlob.h"
32
33 #include "bindings/core/dart/DartFile.h"
34 #include "core/dom/ExecutionContext.h"
35
36 namespace blink {
37
38 namespace DartBlobInternal {
39
40 void constructorCallback(Dart_NativeArguments args)
41 {
42 Dart_Handle exception = 0;
43 {
44 ExecutionContext* context = DartUtilities::scriptExecutionContext();
45 if (!context) {
46 exception = Dart_NewStringFromCString("Blob constructor associated d ocument is unavailable");
47 goto fail;
48 }
49
50 Vector<Dart_Handle> blobParts;
51 DartUtilities::extractListElements(Dart_GetNativeArgument(args, 0), exce ption, blobParts);
52 if (exception)
53 goto fail;
54
55 String type = DartUtilities::dartToStringWithNullCheck(args, 1, exceptio n);
56 if (exception)
57 goto fail;
58
59 String endings = DartUtilities::dartToStringWithNullCheck(args, 2, excep tion);
60 if (exception)
61 goto fail;
62 if (endings.isNull())
63 endings = "transparent";
64 if (endings != "transparent" && endings != "native") {
65 exception = Dart_NewStringFromCString("The endings property must be either \"transparent\" or \"native\"");
66 goto fail;
67 }
68
69 // FIXMEDART: we could optimize when/where we compute this bool.
70 bool normalizeLineEndingsToNative = endings == "native";
71
72 OwnPtr<BlobData> blobData = BlobData::create();
73 blobData->setContentType(type);
74
75 uint32_t length = blobParts.size();
76
77 for (uint32_t i = 0; i < length; ++i) {
78 Dart_Handle item = blobParts[i];
79 if (Dart_IsByteBuffer(item) || Dart_IsTypedData(item)) {
80 RefPtr<ArrayBuffer> arrayBuffer = DartUtilities::dartToArrayBuff er(item, exception);
81 if (exception)
82 goto fail;
83 ASSERT(arrayBuffer);
84 blobData->appendArrayBuffer(arrayBuffer.get());
85 } else if (DartDOMWrapper::subtypeOf(item, DartBlob::dartClassId)) {
86 Blob* blob = DartBlob::toNative(item, exception);
87 if (exception)
88 goto fail;
89 ASSERT(blob);
90 blobData->appendBlob(blob->blobDataHandle(), 0, blob->size());
91 } else {
92 String stringValue = DartUtilities::dartToString(item, exception );
93 if (exception)
94 goto fail;
95 blobData->appendText(stringValue, normalizeLineEndingsToNative);
96 }
97 }
98
99 long long blobSize = blobData->length();
100 RefPtr<Blob> blob = Blob::create(BlobDataHandle::create(blobData.release (), blobSize));
101 DartDOMWrapper::returnToDart<DartBlob>(args, blob.release());
102 return;
103 }
104
105 fail:
106 Dart_ThrowException(exception);
107 ASSERT_NOT_REACHED();
108 }
109
110 }
111
112 Dart_Handle DartBlob::createWrapper(DartDOMData* domData, Blob* blob)
113 {
114 if (!blob)
115 return Dart_Null();
116
117 if (blob->isFile())
118 return DartFile::createWrapper(domData, static_cast<File*>(blob));
119
120 return DartDOMWrapper::createWrapper<DartBlob>(domData, blob);
121 }
122
123 }
OLDNEW
« no previous file with comments | « sky/engine/bindings-dart/core/dart/V8Converter.cpp ('k') | sky/engine/bindings-dart/core/dart/custom/DartCSSRuleCustom.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698