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

Side by Side Diff: third_party/WebKit/Source/modules/nfc/NFC.cpp

Issue 2524743002: [webnfc] Restrict NFC message size to 32KB (Closed)
Patch Set: Created 4 years, 1 month 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
« no previous file with comments | « third_party/WebKit/LayoutTests/nfc/push.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/nfc/NFC.h" 5 #include "modules/nfc/NFC.h"
6 6
7 #include "bindings/core/v8/ScriptPromiseResolver.h" 7 #include "bindings/core/v8/ScriptPromiseResolver.h"
8 #include "bindings/core/v8/V8ArrayBuffer.h" 8 #include "bindings/core/v8/V8ArrayBuffer.h"
9 #include "bindings/core/v8/V8StringResource.h" 9 #include "bindings/core/v8/V8StringResource.h"
10 #include "core/dom/DOMArrayBuffer.h" 10 #include "core/dom/DOMArrayBuffer.h"
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 KURL originURL(ParsedURLString, origin); 419 KURL originURL(ParsedURLString, origin);
420 420
421 if (!message->url.isEmpty() && originURL.canSetPathname()) { 421 if (!message->url.isEmpty() && originURL.canSetPathname()) {
422 originURL.setPath(message->url); 422 originURL.setPath(message->url);
423 } 423 }
424 424
425 message->url = originURL; 425 message->url = originURL;
426 return originURL.isValid(); 426 return originURL.isValid();
427 } 427 }
428 428
429 } // anonymous namespace 429 size_t getNFCMessageSize(
kenneth.r.christiansen 2016/11/22 13:11:23 measure instead of get?
430 const device::nfc::mojom::blink::NFCMessagePtr& message) {
431 size_t messageSize = message->url.charactersSizeInBytes();
432 for (size_t i = 0; i < message->data.size(); ++i) {
433 messageSize += message->data[i]->media_type.charactersSizeInBytes();
434 messageSize += message->data[i]->data.size();
435 }
436 return messageSize;
437 }
438
439 } // namespace
430 440
431 NFC::NFC(LocalFrame* frame) 441 NFC::NFC(LocalFrame* frame)
432 : PageVisibilityObserver(frame->page()), 442 : PageVisibilityObserver(frame->page()),
433 ContextLifecycleObserver(frame->document()), 443 ContextLifecycleObserver(frame->document()),
434 m_client(this) { 444 m_client(this) {
435 ThreadState::current()->registerPreFinalizer(this); 445 ThreadState::current()->registerPreFinalizer(this);
436 frame->interfaceProvider()->getInterface(mojo::GetProxy(&m_nfc)); 446 frame->interfaceProvider()->getInterface(mojo::GetProxy(&m_nfc));
437 m_nfc.set_connection_error_handler(convertToBaseCallback( 447 m_nfc.set_connection_error_handler(convertToBaseCallback(
438 WTF::bind(&NFC::OnConnectionError, wrapWeakPersistent(this)))); 448 WTF::bind(&NFC::OnConnectionError, wrapWeakPersistent(this))));
439 m_nfc->SetClient(m_client.CreateInterfacePtrAndBind()); 449 m_nfc->SetClient(m_client.CreateInterfacePtrAndBind());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 if (!message) 491 if (!message)
482 return ScriptPromise::rejectWithDOMException( 492 return ScriptPromise::rejectWithDOMException(
483 scriptState, DOMException::create(SyntaxError)); 493 scriptState, DOMException::create(SyntaxError));
484 494
485 if (!setURL( 495 if (!setURL(
486 scriptState->getExecutionContext()->getSecurityOrigin()->toString(), 496 scriptState->getExecutionContext()->getSecurityOrigin()->toString(),
487 message)) 497 message))
488 return ScriptPromise::rejectWithDOMException( 498 return ScriptPromise::rejectWithDOMException(
489 scriptState, DOMException::create(SyntaxError)); 499 scriptState, DOMException::create(SyntaxError));
490 500
501 if (getNFCMessageSize(message) >
502 device::nfc::mojom::blink::NFCMessage::kMaxSize) {
503 return ScriptPromise::rejectWithDOMException(
504 scriptState, DOMException::create(NotSupportedError));
505 }
506
491 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); 507 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
492 m_requests.add(resolver); 508 m_requests.add(resolver);
493 auto callback = convertToBaseCallback(WTF::bind(&NFC::OnRequestCompleted, 509 auto callback = convertToBaseCallback(WTF::bind(&NFC::OnRequestCompleted,
494 wrapPersistent(this), 510 wrapPersistent(this),
495 wrapPersistent(resolver))); 511 wrapPersistent(resolver)));
496 m_nfc->Push(std::move(message), 512 m_nfc->Push(std::move(message),
497 device::nfc::mojom::blink::NFCPushOptions::From(options), 513 device::nfc::mojom::blink::NFCPushOptions::From(options),
498 callback); 514 callback);
499 515
500 return resolver->promise(); 516 return resolver->promise();
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 // TODO(shalamov): Not implemented. 604 // TODO(shalamov): Not implemented.
589 } 605 }
590 606
591 DEFINE_TRACE(NFC) { 607 DEFINE_TRACE(NFC) {
592 PageVisibilityObserver::trace(visitor); 608 PageVisibilityObserver::trace(visitor);
593 ContextLifecycleObserver::trace(visitor); 609 ContextLifecycleObserver::trace(visitor);
594 visitor->trace(m_requests); 610 visitor->trace(m_requests);
595 } 611 }
596 612
597 } // namespace blink 613 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/nfc/push.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698