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

Unified Diff: webrtc/api/peerconnectioninterface.h

Issue 2587133004: Reland of: Adding error output param to SetConfiguration, using new RTCError type. (Closed)
Patch Set: Fixing compile error in less confusing way. Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/api/peerconnection_unittest.cc ('k') | webrtc/api/peerconnectioninterface_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/peerconnectioninterface.h
diff --git a/webrtc/api/peerconnectioninterface.h b/webrtc/api/peerconnectioninterface.h
index 5f5a58b4319295312cf169a612855b897d73a9af..5e1fd327e221bcc9b1493f7b16e6e52e6ac3337b 100644
--- a/webrtc/api/peerconnectioninterface.h
+++ b/webrtc/api/peerconnectioninterface.h
@@ -150,9 +150,10 @@ class MetricsObserverInterface : public rtc::RefCountInterface {
typedef MetricsObserverInterface UMAObserver;
// Enumeration to represent distinct classes of errors that an application
-// may wish to act upon differently. These roughly map to DOMExceptions in
-// the web API, as described in the comments below.
-enum class RtcError {
+// may wish to act upon differently. These roughly map to DOMExceptions or
+// RTCError "errorDetailEnum" values in the web API, as described in the
+// comments below.
+enum class RTCErrorType {
// No error.
NONE,
// A supplied parameter is valid, but currently unsupported.
@@ -183,9 +184,26 @@ enum class RtcError {
INTERNAL_ERROR,
};
+// Roughly corresponds to RTCError in the web api. Holds an error type and
+// possibly additional information specific to that error.
+//
+// Doesn't contain anything beyond a type now, but will in the future as more
+// errors are implemented.
+class RTCError {
+ public:
+ RTCError() : type_(RTCErrorType::NONE) {}
+ explicit RTCError(RTCErrorType type) : type_(type) {}
+
+ RTCErrorType type() const { return type_; }
+ void set_type(RTCErrorType type) { type_ = type; }
+
+ private:
+ RTCErrorType type_;
+};
+
// Outputs the error as a friendly string.
// Update this method when adding a new error type.
-std::ostream& operator<<(std::ostream& stream, RtcError error);
+std::ostream& operator<<(std::ostream& stream, RTCErrorType error);
class PeerConnectionInterface : public rtc::RefCountInterface {
public:
@@ -319,6 +337,9 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
}
}
+ bool operator==(const RTCConfiguration& o) const;
+ bool operator!=(const RTCConfiguration& o) const;
+
bool dscp() { return media_config.enable_dscp; }
void set_dscp(bool enable) { media_config.enable_dscp = enable; }
@@ -392,6 +413,9 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
// If true, ICE role is redetermined when peerconnection sets a local
// transport description that indicates an ICE restart.
bool redetermine_role_on_ice_restart = true;
+ //
+ // Don't forget to update operator== if adding something.
+ //
};
struct RTCOfferAnswerOptions {
@@ -569,14 +593,38 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
virtual PeerConnectionInterface::RTCConfiguration GetConfiguration() {
return PeerConnectionInterface::RTCConfiguration();
}
+
// Sets the PeerConnection's global configuration to |config|.
+ //
+ // The members of |config| that may be changed are |type|, |servers|,
+ // |ice_candidate_pool_size| and |prune_turn_ports| (though the candidate
+ // pool size can't be changed after the first call to SetLocalDescription).
+ // Note that this means the BUNDLE and RTCP-multiplexing policies cannot be
+ // changed with this method.
+ //
// Any changes to STUN/TURN servers or ICE candidate policy will affect the
// next gathering phase, and cause the next call to createOffer to generate
- // new ICE credentials. Note that the BUNDLE and RTCP-multiplexing policies
- // cannot be changed with this method.
+ // new ICE credentials, as described in JSEP. This also occurs when
+ // |prune_turn_ports| changes, for the same reasoning.
+ //
+ // If an error occurs, returns false and populates |error| if non-null:
+ // - INVALID_MODIFICATION if |config| contains a modified parameter other
+ // than one of the parameters listed above.
+ // - INVALID_RANGE if |ice_candidate_pool_size| is out of range.
+ // - SYNTAX_ERROR if parsing an ICE server URL failed.
+ // - INVALID_PARAMETER if a TURN server is missing |username| or |password|.
+ // - INTERNAL_ERROR if an unexpected error occurred.
+ //
// TODO(deadbeef): Make this pure virtual once all Chrome subclasses of
// PeerConnectionInterface implement it.
virtual bool SetConfiguration(
+ const PeerConnectionInterface::RTCConfiguration& config,
+ RTCError* error) {
+ return false;
+ }
+ // Version without error output param for backwards compatibility.
+ // TODO(deadbeef): Remove once chromium is updated.
+ virtual bool SetConfiguration(
const PeerConnectionInterface::RTCConfiguration& config) {
return false;
}
« no previous file with comments | « webrtc/api/peerconnection_unittest.cc ('k') | webrtc/api/peerconnectioninterface_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698