public boolean process(JsRequest request, JsResponseBuilder builder) throws JsException { JsUri jsUri = request.getJsUri(); // Don't emit the JS itself; instead emit JS loader script that loads // versioned JS. The loader script is much smaller and cacheable for a // configurable amount of time. if (jsUri.isJsload()) { // Require users to specify &onload=. This ensures a reliable continuation // of JS execution. IE asynchronously loads script, before it loads // source-scripted and inlined JS. if (requireOnload && jsUri.getOnload() == null) { throw new JsException(HttpServletResponse.SC_BAD_REQUEST, JSLOAD_ONLOAD_ERROR); } int refresh = getCacheTtlSecs(jsUri); builder.setCacheTtlSecs(refresh); builder.setProxyCacheable(true); doJsload(jsUri, builder); return false; } return true; }
builder.setProxyCacheable(isProxyCacheable); UriStatus uriStatus = jsUri.getStatus(); setResponseCacheTtl(builder, uriStatus != null ? uriStatus : UriStatus.VALID_UNVERSIONED);
@Test public void testGetJsData() throws Exception { List<String> fields = ImmutableList.of("jscontent"); List<String> features = ImmutableList.of("rpc"); Uri resUri = Uri.parse("http://server.com/gadgets/js/rpc"); Capture<JsUri> uriCapture = new Capture<JsUri>(); String jsContent = "var a;"; String onload = "do this"; String repository = "v01"; expect(jsUriManager.makeExternJsUri(capture(uriCapture))).andReturn(resUri); expect(jsPipeline.execute(EasyMock.isA(JsRequest.class))).andReturn( new JsResponseBuilder().appendJs(jsContent, "js").setProxyCacheable(true).build()); GadgetsHandlerApi.JsRequest request = createJsRequest(FakeProcessor.SPEC_URL.toString(), CONTAINER, fields, features, repository); expect(request.getOnload()).andStubReturn(onload); expect(request.getContext()).andStubReturn(GadgetsHandlerApi.RenderingContext.CONTAINER); replay(); GadgetsHandlerApi.JsResponse response = gadgetHandler.getJs(request); JsUri expectedUri = new JsUri(null, false, false, CONTAINER, FakeProcessor.SPEC_URL.toString(), features, null, onload, false, false, RenderingContext.CONTAINER, null, repository); assertEquals(expectedUri, uriCapture.getValue()); assertNull(response.getJsUrl()); assertEquals(jsContent, response.getJsContent()); assertEquals(timeSource.currentTimeMillis() + HttpUtil.getDefaultTtl() * 1000, response .getExpireTimeMs().longValue()); verify(); }
@Test public void testGetJsData() throws Exception { List<String> fields = ImmutableList.of("jscontent"); List<String> features = ImmutableList.of("rpc"); Uri resUri = Uri.parse("http://server.com/gadgets/js/rpc"); Capture<JsUri> uriCapture = new Capture<JsUri>(); String jsContent = "var a;"; String onload = "do this"; String repository = "v01"; expect(jsUriManager.makeExternJsUri(capture(uriCapture))).andReturn(resUri); expect(jsPipeline.execute(EasyMock.isA(JsRequest.class))).andReturn( new JsResponseBuilder().appendJs(jsContent, "js").setProxyCacheable(true).build()); GadgetsHandlerApi.JsRequest request = createJsRequest(FakeProcessor.SPEC_URL.toString(), CONTAINER, fields, features, repository); expect(request.getOnload()).andStubReturn(onload); expect(request.getContext()).andStubReturn(GadgetsHandlerApi.RenderingContext.CONTAINER); replay(); GadgetsHandlerApi.JsResponse response = gadgetHandler.getJs(request); JsUri expectedUri = new JsUri(null, false, false, CONTAINER, FakeProcessor.SPEC_URL.toString(), features, null, onload, false, false, RenderingContext.CONTAINER, null, repository); assertEquals(expectedUri, uriCapture.getValue()); assertNull(response.getJsUrl()); assertEquals(jsContent, response.getJsContent()); assertEquals(timeSource.currentTimeMillis() + HttpUtil.getDefaultTtl() * 1000, response .getExpireTimeMs().longValue()); verify(); }