libaddressinput - reduce number of copies in storage class by 2

1. on the way in (Put)
2. on the way out (Get)

BUG=337679

Review URL: https://codereview.chromium.org/148463003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@249102 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/base/values.h b/base/values.h
index 8caf8350..a77cd3bd 100644
--- a/base/values.h
+++ b/base/values.h
@@ -91,6 +91,7 @@
   virtual bool GetAsDouble(double* out_value) const;
   virtual bool GetAsString(std::string* out_value) const;
   virtual bool GetAsString(string16* out_value) const;
+  virtual bool GetAsString(const StringValue** out_value) const;
   virtual bool GetAsList(ListValue** out_value);
   virtual bool GetAsList(const ListValue** out_value) const;
   virtual bool GetAsDictionary(DictionaryValue** out_value);
@@ -154,9 +155,14 @@
 
   virtual ~StringValue();
 
+  // Returns |value_| as a pointer or reference.
+  std::string* GetString();
+  const std::string& GetString() const;
+
   // Overridden from Value:
   virtual bool GetAsString(std::string* out_value) const OVERRIDE;
   virtual bool GetAsString(string16* out_value) const OVERRIDE;
+  virtual bool GetAsString(const StringValue** out_value) const OVERRIDE;
   virtual StringValue* DeepCopy() const OVERRIDE;
   virtual bool Equals(const Value* other) const OVERRIDE;