Merge "examples/hello:  Add simple integration tests meant to be used in regression tests."
diff --git a/profiles/internal/rpc/server.go b/profiles/internal/rpc/server.go
index e89bfe9..c842b2d 100644
--- a/profiles/internal/rpc/server.go
+++ b/profiles/internal/rpc/server.go
@@ -378,6 +378,12 @@
 	// Start the proxy as early as possible, ignore duplicate requests
 	// for the same proxy.
 	if _, inuse := s.proxies[listenSpec.Proxy]; useProxy && !inuse {
+		// Pre-emptively fetch discharges on the blessings (they will be cached
+		// within s.dc for future calls).
+		// This shouldn't be required, but is a hack to reduce flakiness in
+		// JavaScript browser integration tests.
+		// See https://v.io/i/392
+		s.dc.PrepareDischarges(s.ctx, s.blessings.ThirdPartyCaveats(), security.DischargeImpetus{})
 		// We have a goroutine for listening on proxy connections.
 		s.active.Add(1)
 		go func() {
@@ -1344,38 +1350,30 @@
 func (a proxyAuth) RPCStreamListenerOpt() {}
 
 func (a proxyAuth) Login(proxy stream.Flow) (security.Blessings, []security.Discharge, error) {
-	// TODO(ashankar): Restore this block after figuring out flakiness in javascript-browser-integration tests.
-	// https://v.io/i/33
-	return security.Blessings{}, nil, nil
-	/*
-		var (
-			principal = a.s.principal
-			dc        = a.s.dc
-			ctx       = a.s.ctx
-		)
-		if principal == nil {
-			return security.Blessings{}, nil, nil
-		}
-		proxyNames, _ := security.RemoteBlessingNames(ctx, security.NewCall(&security.CallParams{
-			LocalPrincipal:   principal,
-			RemoteBlessings:  proxy.RemoteBlessings(),
-			RemoteDischarges: proxy.RemoteDischarges(),
-			RemoteEndpoint:   proxy.RemoteEndpoint(),
-			LocalEndpoint:    proxy.LocalEndpoint(),
-		}))
-		blessings := principal.BlessingStore().ForPeer(proxyNames...)
-		tpc := blessings.ThirdPartyCaveats()
-		if len(tpc) == 0 {
-			return blessings, nil, nil
-		}
-		// Ugh! Have to convert from proxyNames to BlessingPatterns
-		proxyPats := make([]security.BlessingPattern, len(proxyNames))
-		for idx, n := range proxyNames {
-			proxyPats[idx] = security.BlessingPattern(n)
-		}
-		discharges := dc.PrepareDischarges(ctx, tpc, security.DischargeImpetus{Server: proxyPats})
-		return blessings, discharges, nil
-	*/
+	var (
+		principal = a.s.principal
+		dc        = a.s.dc
+		ctx       = a.s.ctx
+	)
+	if principal == nil {
+		return security.Blessings{}, nil, nil
+	}
+	proxyNames, _ := security.RemoteBlessingNames(ctx, security.NewCall(&security.CallParams{
+		LocalPrincipal:   principal,
+		RemoteBlessings:  proxy.RemoteBlessings(),
+		RemoteDischarges: proxy.RemoteDischarges(),
+		RemoteEndpoint:   proxy.RemoteEndpoint(),
+		LocalEndpoint:    proxy.LocalEndpoint(),
+	}))
+	blessings := principal.BlessingStore().ForPeer(proxyNames...)
+	tpc := blessings.ThirdPartyCaveats()
+	if len(tpc) == 0 {
+		return blessings, nil, nil
+	}
+	// Set DischargeImpetus.Server = proxyNames.
+	// See https://v.io/i/392
+	discharges := dc.PrepareDischarges(ctx, tpc, security.DischargeImpetus{})
+	return blessings, discharges, nil
 }
 
 var _ manager.ProxyAuthenticator = proxyAuth{}
diff --git a/services/proxy/proxyd/main.go b/services/proxy/proxyd/main.go
index f40b042..a617145 100644
--- a/services/proxy/proxyd/main.go
+++ b/services/proxy/proxyd/main.go
@@ -53,9 +53,6 @@
 		list.In = append(list.In, security.DefaultBlessingPatterns(v23.GetPrincipal(ctx))...)
 		vlog.Infof("Using access list to control proxy use: %v", list)
 		authorizer = list
-		// See https://v.io/i/33
-		// Remove this line
-		authorizer = security.AllowEveryone()
 	}
 
 	proxyShutdown, proxyEndpoint, err := static.NewProxy(ctx, listenSpec, authorizer, *name)