| // Copyright (C) 2020 The Android Open Source Project | 
 | // | 
 | // Licensed under the Apache License, Version 2.0 (the "License"); | 
 | // you may not use this file except in compliance with the License. | 
 | // You may obtain a copy of the License at | 
 | // | 
 | //      http://www.apache.org/licenses/LICENSE-2.0 | 
 | // | 
 | // Unless required by applicable law or agreed to in writing, software | 
 | // distributed under the License is distributed on an "AS IS" BASIS, | 
 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | // See the License for the specific language governing permissions and | 
 | // limitations under the License. | 
 |  | 
 | import m from 'mithril'; | 
 | import {TraceUrlSource} from '../core/trace_source'; | 
 | import {createPermalink} from './permalink'; | 
 | import {showModal} from '../widgets/modal'; | 
 | import {globals} from './globals'; | 
 | import {AppImpl} from '../core/app_impl'; | 
 | import {Trace} from '../public/trace'; | 
 | import {TraceImpl} from '../core/trace_impl'; | 
 | import {CopyableLink} from '../widgets/copyable_link'; | 
 |  | 
 | export function isShareable(trace: Trace) { | 
 |   return globals.isInternalUser && trace.traceInfo.downloadable; | 
 | } | 
 |  | 
 | export async function shareTrace(trace: TraceImpl) { | 
 |   const traceSource = trace.traceInfo.source; | 
 |   const traceUrl = (traceSource as TraceUrlSource).url ?? ''; | 
 |  | 
 |   // If the trace is not shareable (has been pushed via postMessage()) but has | 
 |   // a url, create a pseudo-permalink by echoing back the URL. | 
 |   if (!isShareable(trace)) { | 
 |     const msg = [ | 
 |       m( | 
 |         'p', | 
 |         'This trace was opened by an external site and as such cannot ' + | 
 |           'be re-shared preserving the UI state.', | 
 |       ), | 
 |     ]; | 
 |     if (traceUrl) { | 
 |       msg.push(m('p', 'By using the URL below you can open this trace again.')); | 
 |       msg.push(m('p', 'Clicking will copy the URL into the clipboard.')); | 
 |       msg.push(m(CopyableLink, {url: traceUrl})); | 
 |     } | 
 |  | 
 |     showModal({ | 
 |       title: 'Cannot create permalink from external trace', | 
 |       content: m('div', msg), | 
 |     }); | 
 |     return; | 
 |   } | 
 |  | 
 |   if (!isShareable(trace)) return; | 
 |  | 
 |   const result = confirm( | 
 |     `Upload UI state and generate a permalink. ` + | 
 |       `The trace will be accessible by anybody with the permalink.`, | 
 |   ); | 
 |   if (result) { | 
 |     AppImpl.instance.analytics.logEvent('Trace Actions', 'Create permalink'); | 
 |     return await createPermalink(); | 
 |   } | 
 | } |