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

Side by Side Diff: chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.cc

Issue 250143002: Media Galleries API: Audio/Video attached pictures support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.h" 5 #include "chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.h"
6 6
7 #include "chrome/browser/extensions/blob_reader.h" 7 #include "chrome/browser/extensions/blob_reader.h"
8 #include "chrome/common/chrome_utility_messages.h" 8 #include "chrome/common/chrome_utility_messages.h"
9 #include "content/public/browser/browser_thread.h" 9 #include "content/public/browser/browser_thread.h"
10 #include "content/public/browser/child_process_data.h" 10 #include "content/public/browser/child_process_data.h"
11 #include "content/public/browser/utility_process_host.h" 11 #include "content/public/browser/utility_process_host.h"
12 12
13 using content::BrowserThread; 13 using content::BrowserThread;
14 14
15 namespace metadata { 15 namespace metadata {
16 16
17 SafeMediaMetadataParser::SafeMediaMetadataParser(Profile* profile, 17 SafeMediaMetadataParser::SafeMediaMetadataParser(
18 const std::string& blob_uuid, 18 Profile* profile, const std::string& blob_uuid, int64 blob_size,
19 int64 blob_size, 19 const std::string& mime_type, bool get_attached_pictures)
20 const std::string& mime_type)
21 : profile_(profile), 20 : profile_(profile),
22 blob_uuid_(blob_uuid), 21 blob_uuid_(blob_uuid),
23 blob_size_(blob_size), 22 blob_size_(blob_size),
24 mime_type_(mime_type), 23 mime_type_(mime_type),
24 get_attached_pictures_(get_attached_pictures),
25 parser_state_(INITIAL_STATE) { 25 parser_state_(INITIAL_STATE) {
26 DCHECK_CURRENTLY_ON(BrowserThread::UI); 26 DCHECK_CURRENTLY_ON(BrowserThread::UI);
27 } 27 }
28 28
29 void SafeMediaMetadataParser::Start(const DoneCallback& callback) { 29 void SafeMediaMetadataParser::Start(const DoneCallback& callback) {
30 DCHECK_CURRENTLY_ON(BrowserThread::UI); 30 DCHECK_CURRENTLY_ON(BrowserThread::UI);
31 31
32 BrowserThread::PostTask( 32 BrowserThread::PostTask(
33 BrowserThread::IO, 33 BrowserThread::IO,
34 FROM_HERE, 34 FROM_HERE,
35 base::Bind(&SafeMediaMetadataParser::StartWorkOnIOThread, this, 35 base::Bind(&SafeMediaMetadataParser::StartWorkOnIOThread, this,
36 callback)); 36 callback));
37 } 37 }
38 38
39 SafeMediaMetadataParser::~SafeMediaMetadataParser() { 39 SafeMediaMetadataParser::~SafeMediaMetadataParser() {
40 } 40 }
41 41
42 void SafeMediaMetadataParser::StartWorkOnIOThread( 42 void SafeMediaMetadataParser::StartWorkOnIOThread(
43 const DoneCallback& callback) { 43 const DoneCallback& callback) {
44 DCHECK_CURRENTLY_ON(BrowserThread::IO); 44 DCHECK_CURRENTLY_ON(BrowserThread::IO);
45 DCHECK_EQ(INITIAL_STATE, parser_state_); 45 DCHECK_EQ(INITIAL_STATE, parser_state_);
46 DCHECK(!callback.is_null()); 46 DCHECK(!callback.is_null());
47 47
48 callback_ = callback; 48 callback_ = callback;
49 49
50 utility_process_host_ = content::UtilityProcessHost::Create( 50 utility_process_host_ = content::UtilityProcessHost::Create(
51 this, base::MessageLoopProxy::current())->AsWeakPtr(); 51 this, base::MessageLoopProxy::current())->AsWeakPtr();
52 52
53 utility_process_host_->Send( 53 utility_process_host_->Send(
54 new ChromeUtilityMsg_ParseMediaMetadata(mime_type_, blob_size_)); 54 new ChromeUtilityMsg_ParseMediaMetadata(mime_type_, blob_size_,
55 get_attached_pictures_));
55 56
56 parser_state_ = STARTED_PARSING_STATE; 57 parser_state_ = STARTED_PARSING_STATE;
57 } 58 }
58 59
59 void SafeMediaMetadataParser::OnParseMediaMetadataFinished( 60 void SafeMediaMetadataParser::OnParseMediaMetadataFinished(
60 bool parse_success, const base::DictionaryValue& metadata_dictionary) { 61 bool parse_success, const base::DictionaryValue& metadata_dictionary,
62 const std::vector<std::string>& attached_pictures_bytes,
63 const std::vector<std::string>& attached_pictures_types) {
61 DCHECK_CURRENTLY_ON(BrowserThread::IO); 64 DCHECK_CURRENTLY_ON(BrowserThread::IO);
62 DCHECK(!callback_.is_null()); 65 DCHECK(!callback_.is_null());
63 66
64 if (parser_state_ != STARTED_PARSING_STATE) 67 if (parser_state_ != STARTED_PARSING_STATE)
65 return; 68 return;
66 69
70 if (attached_pictures_bytes.size() != attached_pictures_types.size()) {
vandebo (ex-Chrome) 2014/04/23 23:22:45 nit: no {} Should this be a DCHECK ?
tommycli 2014/04/29 00:15:51 Done. Moving to a struct eliminated the need for t
71 DLOG(ERROR) << "Media metadata parser gave malformed attached picture data";
72 }
73
67 BrowserThread::PostTask( 74 BrowserThread::PostTask(
68 BrowserThread::UI, 75 BrowserThread::UI,
69 FROM_HERE, 76 FROM_HERE,
70 base::Bind(callback_, parse_success, 77 base::Bind(callback_, parse_success,
71 base::Owned(metadata_dictionary.DeepCopy()))); 78 base::Owned(metadata_dictionary.DeepCopy()),
79 attached_pictures_bytes, attached_pictures_types));
72 parser_state_ = FINISHED_PARSING_STATE; 80 parser_state_ = FINISHED_PARSING_STATE;
73 } 81 }
74 82
75 void SafeMediaMetadataParser::OnUtilityProcessRequestBlobBytes( 83 void SafeMediaMetadataParser::OnUtilityProcessRequestBlobBytes(
76 int64 request_id, int64 byte_start, int64 length) { 84 int64 request_id, int64 byte_start, int64 length) {
77 DCHECK_CURRENTLY_ON(BrowserThread::IO); 85 DCHECK_CURRENTLY_ON(BrowserThread::IO);
78 BrowserThread::PostTask( 86 BrowserThread::PostTask(
79 BrowserThread::UI, 87 BrowserThread::UI,
80 FROM_HERE, 88 FROM_HERE,
81 base::Bind(&SafeMediaMetadataParser::StartBlobReaderOnUIThread, this, 89 base::Bind(&SafeMediaMetadataParser::StartBlobReaderOnUIThread, this,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 request_id, *data)); 121 request_id, *data));
114 } 122 }
115 123
116 void SafeMediaMetadataParser::OnProcessCrashed(int exit_code) { 124 void SafeMediaMetadataParser::OnProcessCrashed(int exit_code) {
117 DCHECK_CURRENTLY_ON(BrowserThread::IO); 125 DCHECK_CURRENTLY_ON(BrowserThread::IO);
118 DCHECK(!callback_.is_null()); 126 DCHECK(!callback_.is_null());
119 127
120 BrowserThread::PostTask( 128 BrowserThread::PostTask(
121 BrowserThread::UI, 129 BrowserThread::UI,
122 FROM_HERE, 130 FROM_HERE,
123 base::Bind(callback_, false, base::Owned(new base::DictionaryValue))); 131 base::Bind(callback_, false, base::Owned(new base::DictionaryValue),
132 std::vector<std::string>(), std::vector<std::string>()));
124 parser_state_ = FINISHED_PARSING_STATE; 133 parser_state_ = FINISHED_PARSING_STATE;
125 } 134 }
126 135
127 bool SafeMediaMetadataParser::OnMessageReceived(const IPC::Message& message) { 136 bool SafeMediaMetadataParser::OnMessageReceived(const IPC::Message& message) {
128 bool handled = true; 137 bool handled = true;
129 IPC_BEGIN_MESSAGE_MAP(SafeMediaMetadataParser, message) 138 IPC_BEGIN_MESSAGE_MAP(SafeMediaMetadataParser, message)
130 IPC_MESSAGE_HANDLER( 139 IPC_MESSAGE_HANDLER(
131 ChromeUtilityHostMsg_ParseMediaMetadata_Finished, 140 ChromeUtilityHostMsg_ParseMediaMetadata_Finished,
132 OnParseMediaMetadataFinished) 141 OnParseMediaMetadataFinished)
133 IPC_MESSAGE_HANDLER( 142 IPC_MESSAGE_HANDLER(
134 ChromeUtilityHostMsg_RequestBlobBytes, 143 ChromeUtilityHostMsg_RequestBlobBytes,
135 OnUtilityProcessRequestBlobBytes) 144 OnUtilityProcessRequestBlobBytes)
136 IPC_MESSAGE_UNHANDLED(handled = false) 145 IPC_MESSAGE_UNHANDLED(handled = false)
137 IPC_END_MESSAGE_MAP() 146 IPC_END_MESSAGE_MAP()
138 return handled; 147 return handled;
139 } 148 }
140 149
141 } // namespace metadata 150 } // namespace metadata
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698