Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "content/browser/presentation/presentation_service_impl.h" | 5 #include "content/browser/presentation/presentation_service_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "content/browser/presentation/presentation_type_converters.h" | 10 #include "content/browser/presentation/presentation_type_converters.h" |
| 11 #include "content/public/browser/content_browser_client.h" | 11 #include "content/public/browser/content_browser_client.h" |
| 12 #include "content/public/browser/navigation_details.h" | 12 #include "content/public/browser/navigation_details.h" |
| 13 #include "content/public/browser/presentation_session_message.h" | 13 #include "content/public/browser/presentation_session_message.h" |
| 14 #include "content/public/browser/render_frame_host.h" | 14 #include "content/public/browser/render_frame_host.h" |
| 15 #include "content/public/browser/render_process_host.h" | 15 #include "content/public/browser/render_process_host.h" |
| 16 #include "content/public/browser/web_contents.h" | 16 #include "content/public/browser/web_contents.h" |
| 17 #include "content/public/common/content_client.h" | 17 #include "content/public/common/content_client.h" |
| 18 #include "content/public/common/frame_navigate_params.h" | 18 #include "content/public/common/frame_navigate_params.h" |
| 19 #include "content/public/common/presentation_constants.h" | 19 #include "content/public/common/presentation_constants.h" |
| 20 | 20 |
| 21 namespace content { | 21 namespace content { |
| 22 | 22 |
| 23 namespace { | 23 namespace { |
| 24 | 24 |
| 25 using presentation::PresentationMessageType; | |
|
jochen (gone - plz use gerrit)
2015/06/09 08:29:06
please don't use "using" other for helping for lar
USE s.singapati at gmail.com
2015/06/09 09:07:18
Acknowledged. Yes this is a small change from PS#3
USE s.singapati at gmail.com
2015/06/09 14:12:17
Done.
| |
| 26 | |
| 25 const int kInvalidRequestSessionId = -1; | 27 const int kInvalidRequestSessionId = -1; |
| 26 | 28 |
| 27 int GetNextRequestSessionId() { | 29 int GetNextRequestSessionId() { |
| 28 static int next_request_session_id = 0; | 30 static int next_request_session_id = 0; |
| 29 return ++next_request_session_id; | 31 return ++next_request_session_id; |
| 30 } | 32 } |
| 31 | 33 |
| 32 // The return value takes ownership of the contents of |input|. | 34 // The return value takes ownership of the contents of |input|. |
| 33 presentation::SessionMessagePtr ToMojoSessionMessage( | 35 presentation::SessionMessagePtr ToMojoSessionMessage( |
| 34 content::PresentationSessionMessage* input) { | 36 content::PresentationSessionMessage* input) { |
| 35 presentation::SessionMessagePtr output(presentation::SessionMessage::New()); | 37 presentation::SessionMessagePtr output(presentation::SessionMessage::New()); |
| 36 output->presentation_url.Swap(&input->presentation_url); | 38 output->presentation_url.Swap(&input->presentation_url); |
| 37 output->presentation_id.Swap(&input->presentation_id); | 39 output->presentation_id.Swap(&input->presentation_id); |
| 38 if (input->is_binary()) { | 40 if (input->is_binary()) { |
| 39 // binary data | 41 // binary data |
| 40 output->type = presentation::PresentationMessageType:: | 42 output->type = |
| 41 PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER; | 43 PresentationMessageType::PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER; |
| 42 output->data.Swap(input->data.get()); | 44 output->data.Swap(input->data.get()); |
| 43 } else { | 45 } else { |
| 44 // string message | 46 // string message |
| 45 output->type = | 47 output->type = PresentationMessageType::PRESENTATION_MESSAGE_TYPE_TEXT; |
| 46 presentation::PresentationMessageType::PRESENTATION_MESSAGE_TYPE_TEXT; | |
| 47 output->message.Swap(input->message.get()); | 48 output->message.Swap(input->message.get()); |
| 48 } | 49 } |
| 49 return output.Pass(); | 50 return output.Pass(); |
| 50 } | 51 } |
| 51 | 52 |
| 52 scoped_ptr<content::PresentationSessionMessage> GetPresentationSessionMessage( | 53 scoped_ptr<content::PresentationSessionMessage> GetPresentationSessionMessage( |
| 53 presentation::SessionMessagePtr input) { | 54 presentation::SessionMessagePtr input) { |
| 54 DCHECK(!input.is_null()); | 55 DCHECK(!input.is_null()); |
| 55 scoped_ptr<content::PresentationSessionMessage> output; | 56 scoped_ptr<content::PresentationSessionMessage> output; |
| 56 if (input->type == presentation::PresentationMessageType:: | 57 switch (input->type) { |
| 57 PRESENTATION_MESSAGE_TYPE_TEXT) { | 58 case PresentationMessageType::PRESENTATION_MESSAGE_TYPE_TEXT: { |
| 58 DCHECK(!input->message.is_null()); | 59 DCHECK(!input->message.is_null()); |
| 59 DCHECK(input->data.is_null()); | 60 DCHECK(input->data.is_null()); |
| 60 // Return null PresentationSessionMessage if size exceeds. | 61 // Return null PresentationSessionMessage if size exceeds. |
| 61 if (input->message.size() > content::kMaxPresentationSessionMessageSize) | 62 if (input->message.size() > content::kMaxPresentationSessionMessageSize) |
| 63 return output.Pass(); | |
| 64 | |
| 65 output = content::PresentationSessionMessage::CreateStringMessage( | |
| 66 input->presentation_url, input->presentation_id, | |
| 67 make_scoped_ptr(new std::string)); | |
| 68 input->message.Swap(output->message.get()); | |
| 62 return output.Pass(); | 69 return output.Pass(); |
| 70 } | |
| 71 case PresentationMessageType::PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER: { | |
| 72 DCHECK(!input->data.is_null()); | |
| 73 DCHECK(input->message.is_null()); | |
| 74 if (input->data.size() > content::kMaxPresentationSessionMessageSize) | |
| 75 return output.Pass(); | |
| 63 | 76 |
| 64 output = content::PresentationSessionMessage::CreateStringMessage( | 77 output = content::PresentationSessionMessage::CreateArrayBufferMessage( |
| 65 input->presentation_url, | 78 input->presentation_url, input->presentation_id, |
| 66 input->presentation_id, | 79 make_scoped_ptr(new std::vector<uint8_t>)); |
| 67 make_scoped_ptr(new std::string)); | 80 input->data.Swap(output->data.get()); |
| 68 input->message.Swap(output->message.get()); | 81 return output.Pass(); |
| 82 } | |
| 83 case PresentationMessageType::PRESENTATION_MESSAGE_TYPE_BLOB: { | |
| 84 DCHECK(!input->data.is_null()); | |
| 85 DCHECK(input->message.is_null()); | |
| 86 if (input->data.size() > content::kMaxPresentationSessionMessageSize) | |
| 87 return output.Pass(); | |
| 69 | 88 |
| 70 } else if (input->type == presentation::PresentationMessageType:: | 89 output = content::PresentationSessionMessage::CreateBlobMessage( |
| 71 PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER) { | 90 input->presentation_url, input->presentation_id, |
| 72 DCHECK(!input->data.is_null()); | 91 make_scoped_ptr(new std::vector<uint8_t>)); |
| 73 DCHECK(input->message.is_null()); | 92 input->data.Swap(output->data.get()); |
| 74 // Return null PresentationSessionMessage if size exceeds. | |
| 75 if (input->data.size() > content::kMaxPresentationSessionMessageSize) | |
| 76 return output.Pass(); | 93 return output.Pass(); |
| 77 | 94 } |
| 78 output = content::PresentationSessionMessage::CreateBinaryMessage( | |
| 79 input->presentation_url, | |
| 80 input->presentation_id, | |
| 81 make_scoped_ptr(new std::vector<uint8_t>)); | |
| 82 input->data.Swap(output->data.get()); | |
| 83 } | 95 } |
| 84 | 96 |
| 97 NOTREACHED() << "Invalid presentation message type " << input->type; | |
| 85 return output.Pass(); | 98 return output.Pass(); |
| 86 } | 99 } |
| 87 | 100 |
| 88 void InvokeNewSessionMojoCallbackWithError( | 101 void InvokeNewSessionMojoCallbackWithError( |
| 89 const NewSessionMojoCallback& callback) { | 102 const NewSessionMojoCallback& callback) { |
| 90 callback.Run( | 103 callback.Run( |
| 91 presentation::PresentationSessionInfoPtr(), | 104 presentation::PresentationSessionInfoPtr(), |
| 92 presentation::PresentationError::From( | 105 presentation::PresentationError::From( |
| 93 PresentationError(PRESENTATION_ERROR_UNKNOWN, "Internal error"))); | 106 PresentationError(PRESENTATION_ERROR_UNKNOWN, "Internal error"))); |
| 94 } | 107 } |
| (...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 665 void PresentationServiceImpl::DefaultSessionStartContext::Reset() { | 678 void PresentationServiceImpl::DefaultSessionStartContext::Reset() { |
| 666 ScopedVector<DefaultSessionMojoCallback> callbacks; | 679 ScopedVector<DefaultSessionMojoCallback> callbacks; |
| 667 callbacks.swap(callbacks_); | 680 callbacks.swap(callbacks_); |
| 668 for (const auto& callback : callbacks) | 681 for (const auto& callback : callbacks) |
| 669 callback->Run(presentation::PresentationSessionInfoPtr()); | 682 callback->Run(presentation::PresentationSessionInfoPtr()); |
| 670 session_.reset(); | 683 session_.reset(); |
| 671 } | 684 } |
| 672 | 685 |
| 673 } // namespace content | 686 } // namespace content |
| 674 | 687 |
| OLD | NEW |