15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#ifndef CONTENT_COMMON_ANDROID_GIN_JAVA_BRIDGE_VALUE_H_ 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define CONTENT_COMMON_ANDROID_GIN_JAVA_BRIDGE_VALUE_H_ 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/memory/scoped_ptr.h" 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/pickle.h" 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/values.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/common/content_export.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// In Java Bridge, we need to pass some kinds of values that can't 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// be put into base::Value. And since base::Value is not extensible, 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// we transfer these special values via base::BinaryValue. 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace content { 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass GinJavaBridgeValue { 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public: 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu enum Type { 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu TYPE_FIRST_VALUE = 0, 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // JavaScript 'undefined' 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu TYPE_UNDEFINED = 0, 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // JavaScript NaN and Infinity 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu TYPE_NONFINITE, 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Bridge Object ID 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu TYPE_OBJECT_ID, 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu TYPE_LAST_VALUE 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }; 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Serialization 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CONTENT_EXPORT static scoped_ptr<base::BinaryValue> CreateUndefinedValue(); 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CONTENT_EXPORT static scoped_ptr<base::BinaryValue> CreateNonFiniteValue( 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu float in_value); 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CONTENT_EXPORT static scoped_ptr<base::BinaryValue> CreateNonFiniteValue( 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu double in_value); 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CONTENT_EXPORT static scoped_ptr<base::BinaryValue> CreateObjectIDValue( 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int32 in_value); 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // De-serialization 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CONTENT_EXPORT static bool ContainsGinJavaBridgeValue( 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::Value* value); 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CONTENT_EXPORT static scoped_ptr<const GinJavaBridgeValue> FromValue( 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::Value* value); 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CONTENT_EXPORT Type GetType() const; 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CONTENT_EXPORT bool IsType(Type type) const; 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CONTENT_EXPORT bool GetAsNonFinite(float* out_value) const; 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CONTENT_EXPORT bool GetAsObjectID(int32* out_object_id) const; 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private: 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu explicit GinJavaBridgeValue(Type type); 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu explicit GinJavaBridgeValue(const base::BinaryValue* value); 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::BinaryValue* SerializeToBinaryValue(); 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu Pickle pickle_; 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DISALLOW_COPY_AND_ASSIGN(GinJavaBridgeValue); 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace content 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#endif // CONTENT_COMMON_ANDROID_GIN_JAVA_BRIDGE_VALUE_H_ 66